From bb3c15135bda76e0ec2517b6555431686a753e17 Mon Sep 17 00:00:00 2001 From: Max Vojtkov Date: Sat, 8 Aug 2026 15:28:16 +0300 Subject: [PATCH] Bridge terraform-provider-dokploy into a Pulumi provider 18 resources and 5 data sources mapped into the dokploy:index module, with SDKs generated for TypeScript, Python, Go and .NET. --- .github/workflows/build.yml | 79 + .github/workflows/release.yml | 121 + .gitignore | 29 + .goreleaser.yml | 55 + LICENSE | 356 + Makefile | 89 + README.md | 206 + examples/python/Pulumi.yaml | 7 + examples/python/__main__.py | 59 + examples/python/requirements.txt | 3 + examples/typescript/Pulumi.yaml | 9 + examples/typescript/index.ts | 148 + examples/typescript/package.json | 12 + examples/typescript/tsconfig.json | 16 + examples/typescript/webService.ts | 93 + .../cmd/pulumi-resource-dokploy/Pulumi.yaml | 3 + .../bridge-metadata.json | 162 + provider/cmd/pulumi-resource-dokploy/main.go | 23 + .../cmd/pulumi-resource-dokploy/schema.json | 5720 +++++++++++++++++ provider/cmd/pulumi-tfgen-dokploy/main.go | 14 + provider/go.mod | 241 + provider/go.sum | 765 +++ provider/pkg/version/version.go | 4 + provider/resources.go | 165 + sdk/dotnet/.gitattributes | 1 + sdk/dotnet/.gitignore | 2 + sdk/dotnet/Application.cs | 1906 ++++++ sdk/dotnet/Certificate.cs | 202 + sdk/dotnet/Compose.cs | 868 +++ sdk/dotnet/Config/Config.cs | 76 + sdk/dotnet/Config/README.md | 1 + sdk/dotnet/Destination.cs | 286 + sdk/dotnet/Domain.cs | 388 ++ sdk/dotnet/Environment.cs | 172 + sdk/dotnet/GetApplication.cs | 93 + sdk/dotnet/GetEnvironment.cs | 85 + sdk/dotnet/GetProject.cs | 89 + sdk/dotnet/GetProjects.cs | 37 + sdk/dotnet/GetServers.cs | 37 + sdk/dotnet/LICENSE | 356 + sdk/dotnet/MariaDb.cs | 745 +++ sdk/dotnet/Maxvojtkov.Dokploy.csproj | 61 + sdk/dotnet/Mongo.cs | 706 ++ sdk/dotnet/Mount.cs | 220 + sdk/dotnet/MySql.cs | 745 +++ .../Outputs/GetProjectEnvironmentResult.cs | 34 + .../Outputs/GetProjectsProjectResult.cs | 38 + sdk/dotnet/Outputs/GetServersServerResult.cs | 38 + sdk/dotnet/Port.cs | 166 + sdk/dotnet/Postgres.cs | 706 ++ sdk/dotnet/Project.cs | 166 + sdk/dotnet/Provider.cs | 130 + sdk/dotnet/Pulumi.yaml | 3 + sdk/dotnet/README.md | 206 + sdk/dotnet/Redirect.cs | 160 + sdk/dotnet/Redis.cs | 670 ++ sdk/dotnet/Registry.cs | 238 + sdk/dotnet/Security.cs | 166 + sdk/dotnet/SshKey.cs | 196 + sdk/dotnet/Utilities.cs | 92 + sdk/dotnet/logo.png | Bin 0 -> 7934 bytes sdk/dotnet/pulumi-plugin.json | 6 + sdk/dotnet/version.txt | 1 + sdk/go.mod | 115 + sdk/go.sum | 335 + sdk/go/.gitattributes | 1 + sdk/go/Pulumi.yaml | 3 + sdk/go/dokploy/application.go | 1650 +++++ sdk/go/dokploy/certificate.go | 299 + sdk/go/dokploy/compose.go | 855 +++ sdk/go/dokploy/config/config.go | 56 + sdk/go/dokploy/destination.go | 368 ++ sdk/go/dokploy/doc.go | 2 + sdk/go/dokploy/domain.go | 454 ++ sdk/go/dokploy/environment.go | 285 + sdk/go/dokploy/getApplication.go | 113 + sdk/go/dokploy/getEnvironment.go | 103 + sdk/go/dokploy/getProject.go | 108 + sdk/go/dokploy/getProjects.go | 57 + sdk/go/dokploy/getServers.go | 57 + sdk/go/dokploy/init.go | 185 + sdk/go/dokploy/internal/pulumiUtilities.go | 184 + sdk/go/dokploy/internal/pulumiVersion.go | 11 + sdk/go/dokploy/mariaDb.go | 731 +++ sdk/go/dokploy/mongo.go | 703 ++ sdk/go/dokploy/mount.go | 332 + sdk/go/dokploy/mySql.go | 731 +++ sdk/go/dokploy/port.go | 287 + sdk/go/dokploy/postgres.go | 709 ++ sdk/go/dokploy/project.go | 277 + sdk/go/dokploy/provider.go | 162 + sdk/go/dokploy/pulumi-plugin.json | 6 + sdk/go/dokploy/pulumiTypes.go | 359 ++ sdk/go/dokploy/redirect.go | 280 + sdk/go/dokploy/redis.go | 673 ++ sdk/go/dokploy/registry.go | 335 + sdk/go/dokploy/security.go | 272 + sdk/go/dokploy/sshKey.go | 295 + sdk/nodejs/.gitattributes | 1 + sdk/nodejs/.gitignore | 2 + sdk/nodejs/Pulumi.yaml | 3 + sdk/nodejs/README.md | 4 + sdk/nodejs/application.ts | 1408 ++++ sdk/nodejs/certificate.ts | 155 + sdk/nodejs/compose.ts | 678 ++ sdk/nodejs/config/index.ts | 5 + sdk/nodejs/config/vars.ts | 53 + sdk/nodejs/destination.ts | 220 + sdk/nodejs/domain.ts | 304 + sdk/nodejs/environment.ts | 146 + sdk/nodejs/getApplication.ts | 47 + sdk/nodejs/getEnvironment.ts | 45 + sdk/nodejs/getProject.ts | 48 + sdk/nodejs/getProjects.ts | 25 + sdk/nodejs/getServers.ts | 25 + sdk/nodejs/index.ts | 207 + sdk/nodejs/mariaDb.ts | 555 ++ sdk/nodejs/mongo.ts | 532 ++ sdk/nodejs/mount.ts | 191 + sdk/nodejs/mySql.ts | 555 ++ sdk/nodejs/package-lock.json | 2683 ++++++++ sdk/nodejs/package.json | 33 + sdk/nodejs/port.ts | 149 + sdk/nodejs/postgres.ts | 538 ++ sdk/nodejs/project.ts | 139 + sdk/nodejs/provider.ts | 99 + sdk/nodejs/redirect.ts | 142 + sdk/nodejs/redis.ts | 504 ++ sdk/nodejs/registry.ts | 189 + sdk/nodejs/security.ts | 130 + sdk/nodejs/sshKey.ts | 151 + sdk/nodejs/tsconfig.json | 48 + sdk/nodejs/types/index.ts | 13 + sdk/nodejs/types/input.ts | 7 + sdk/nodejs/types/output.ts | 27 + sdk/nodejs/utilities.ts | 96 + sdk/python/.gitattributes | 1 + sdk/python/.gitignore | 6 + sdk/python/LICENSE | 356 + sdk/python/Pulumi.yaml | 3 + sdk/python/README.md | 206 + sdk/python/pulumi_dokploy/README.md | 4 + sdk/python/pulumi_dokploy/__init__.py | 201 + sdk/python/pulumi_dokploy/_utilities.py | 328 + sdk/python/pulumi_dokploy/application.py | 4583 +++++++++++++ sdk/python/pulumi_dokploy/certificate.py | 373 ++ sdk/python/pulumi_dokploy/compose.py | 2137 ++++++ sdk/python/pulumi_dokploy/config/__init__.py | 9 + sdk/python/pulumi_dokploy/config/__init__.pyi | 36 + sdk/python/pulumi_dokploy/config/vars.py | 50 + sdk/python/pulumi_dokploy/destination.py | 564 ++ sdk/python/pulumi_dokploy/domain.py | 887 +++ sdk/python/pulumi_dokploy/environment.py | 351 + sdk/python/pulumi_dokploy/get_application.py | 159 + sdk/python/pulumi_dokploy/get_environment.py | 137 + sdk/python/pulumi_dokploy/get_project.py | 149 + sdk/python/pulumi_dokploy/get_projects.py | 68 + sdk/python/pulumi_dokploy/get_servers.py | 68 + sdk/python/pulumi_dokploy/maria_db.py | 1674 +++++ sdk/python/pulumi_dokploy/mongo.py | 1624 +++++ sdk/python/pulumi_dokploy/mount.py | 486 ++ sdk/python/pulumi_dokploy/my_sql.py | 1674 +++++ sdk/python/pulumi_dokploy/outputs.py | 114 + sdk/python/pulumi_dokploy/port.py | 345 + sdk/python/pulumi_dokploy/postgres.py | 1626 +++++ sdk/python/pulumi_dokploy/project.py | 331 + sdk/python/pulumi_dokploy/provider.py | 217 + sdk/python/pulumi_dokploy/pulumi-plugin.json | 6 + sdk/python/pulumi_dokploy/py.typed | 0 sdk/python/pulumi_dokploy/redirect.py | 325 + sdk/python/pulumi_dokploy/redis.py | 1530 +++++ sdk/python/pulumi_dokploy/registry.py | 469 ++ sdk/python/pulumi_dokploy/security.py | 280 + sdk/python/pulumi_dokploy/ssh_key.py | 354 + sdk/python/pyproject.toml | 22 + 175 files changed, 61774 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .goreleaser.yml create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 examples/python/Pulumi.yaml create mode 100644 examples/python/__main__.py create mode 100644 examples/python/requirements.txt create mode 100644 examples/typescript/Pulumi.yaml create mode 100644 examples/typescript/index.ts create mode 100644 examples/typescript/package.json create mode 100644 examples/typescript/tsconfig.json create mode 100644 examples/typescript/webService.ts create mode 100644 provider/cmd/pulumi-resource-dokploy/Pulumi.yaml create mode 100644 provider/cmd/pulumi-resource-dokploy/bridge-metadata.json create mode 100644 provider/cmd/pulumi-resource-dokploy/main.go create mode 100644 provider/cmd/pulumi-resource-dokploy/schema.json create mode 100644 provider/cmd/pulumi-tfgen-dokploy/main.go create mode 100644 provider/go.mod create mode 100644 provider/go.sum create mode 100644 provider/pkg/version/version.go create mode 100644 provider/resources.go create mode 100644 sdk/dotnet/.gitattributes create mode 100644 sdk/dotnet/.gitignore create mode 100644 sdk/dotnet/Application.cs create mode 100644 sdk/dotnet/Certificate.cs create mode 100644 sdk/dotnet/Compose.cs create mode 100644 sdk/dotnet/Config/Config.cs create mode 100644 sdk/dotnet/Config/README.md create mode 100644 sdk/dotnet/Destination.cs create mode 100644 sdk/dotnet/Domain.cs create mode 100644 sdk/dotnet/Environment.cs create mode 100644 sdk/dotnet/GetApplication.cs create mode 100644 sdk/dotnet/GetEnvironment.cs create mode 100644 sdk/dotnet/GetProject.cs create mode 100644 sdk/dotnet/GetProjects.cs create mode 100644 sdk/dotnet/GetServers.cs create mode 100644 sdk/dotnet/LICENSE create mode 100644 sdk/dotnet/MariaDb.cs create mode 100644 sdk/dotnet/Maxvojtkov.Dokploy.csproj create mode 100644 sdk/dotnet/Mongo.cs create mode 100644 sdk/dotnet/Mount.cs create mode 100644 sdk/dotnet/MySql.cs create mode 100644 sdk/dotnet/Outputs/GetProjectEnvironmentResult.cs create mode 100644 sdk/dotnet/Outputs/GetProjectsProjectResult.cs create mode 100644 sdk/dotnet/Outputs/GetServersServerResult.cs create mode 100644 sdk/dotnet/Port.cs create mode 100644 sdk/dotnet/Postgres.cs create mode 100644 sdk/dotnet/Project.cs create mode 100644 sdk/dotnet/Provider.cs create mode 100644 sdk/dotnet/Pulumi.yaml create mode 100644 sdk/dotnet/README.md create mode 100644 sdk/dotnet/Redirect.cs create mode 100644 sdk/dotnet/Redis.cs create mode 100644 sdk/dotnet/Registry.cs create mode 100644 sdk/dotnet/Security.cs create mode 100644 sdk/dotnet/SshKey.cs create mode 100644 sdk/dotnet/Utilities.cs create mode 100644 sdk/dotnet/logo.png create mode 100644 sdk/dotnet/pulumi-plugin.json create mode 100644 sdk/dotnet/version.txt create mode 100644 sdk/go.mod create mode 100644 sdk/go.sum create mode 100644 sdk/go/.gitattributes create mode 100644 sdk/go/Pulumi.yaml create mode 100644 sdk/go/dokploy/application.go create mode 100644 sdk/go/dokploy/certificate.go create mode 100644 sdk/go/dokploy/compose.go create mode 100644 sdk/go/dokploy/config/config.go create mode 100644 sdk/go/dokploy/destination.go create mode 100644 sdk/go/dokploy/doc.go create mode 100644 sdk/go/dokploy/domain.go create mode 100644 sdk/go/dokploy/environment.go create mode 100644 sdk/go/dokploy/getApplication.go create mode 100644 sdk/go/dokploy/getEnvironment.go create mode 100644 sdk/go/dokploy/getProject.go create mode 100644 sdk/go/dokploy/getProjects.go create mode 100644 sdk/go/dokploy/getServers.go create mode 100644 sdk/go/dokploy/init.go create mode 100644 sdk/go/dokploy/internal/pulumiUtilities.go create mode 100644 sdk/go/dokploy/internal/pulumiVersion.go create mode 100644 sdk/go/dokploy/mariaDb.go create mode 100644 sdk/go/dokploy/mongo.go create mode 100644 sdk/go/dokploy/mount.go create mode 100644 sdk/go/dokploy/mySql.go create mode 100644 sdk/go/dokploy/port.go create mode 100644 sdk/go/dokploy/postgres.go create mode 100644 sdk/go/dokploy/project.go create mode 100644 sdk/go/dokploy/provider.go create mode 100644 sdk/go/dokploy/pulumi-plugin.json create mode 100644 sdk/go/dokploy/pulumiTypes.go create mode 100644 sdk/go/dokploy/redirect.go create mode 100644 sdk/go/dokploy/redis.go create mode 100644 sdk/go/dokploy/registry.go create mode 100644 sdk/go/dokploy/security.go create mode 100644 sdk/go/dokploy/sshKey.go create mode 100644 sdk/nodejs/.gitattributes create mode 100644 sdk/nodejs/.gitignore create mode 100644 sdk/nodejs/Pulumi.yaml create mode 100644 sdk/nodejs/README.md create mode 100644 sdk/nodejs/application.ts create mode 100644 sdk/nodejs/certificate.ts create mode 100644 sdk/nodejs/compose.ts create mode 100644 sdk/nodejs/config/index.ts create mode 100644 sdk/nodejs/config/vars.ts create mode 100644 sdk/nodejs/destination.ts create mode 100644 sdk/nodejs/domain.ts create mode 100644 sdk/nodejs/environment.ts create mode 100644 sdk/nodejs/getApplication.ts create mode 100644 sdk/nodejs/getEnvironment.ts create mode 100644 sdk/nodejs/getProject.ts create mode 100644 sdk/nodejs/getProjects.ts create mode 100644 sdk/nodejs/getServers.ts create mode 100644 sdk/nodejs/index.ts create mode 100644 sdk/nodejs/mariaDb.ts create mode 100644 sdk/nodejs/mongo.ts create mode 100644 sdk/nodejs/mount.ts create mode 100644 sdk/nodejs/mySql.ts create mode 100644 sdk/nodejs/package-lock.json create mode 100644 sdk/nodejs/package.json create mode 100644 sdk/nodejs/port.ts create mode 100644 sdk/nodejs/postgres.ts create mode 100644 sdk/nodejs/project.ts create mode 100644 sdk/nodejs/provider.ts create mode 100644 sdk/nodejs/redirect.ts create mode 100644 sdk/nodejs/redis.ts create mode 100644 sdk/nodejs/registry.ts create mode 100644 sdk/nodejs/security.ts create mode 100644 sdk/nodejs/sshKey.ts create mode 100644 sdk/nodejs/tsconfig.json create mode 100644 sdk/nodejs/types/index.ts create mode 100644 sdk/nodejs/types/input.ts create mode 100644 sdk/nodejs/types/output.ts create mode 100644 sdk/nodejs/utilities.ts create mode 100644 sdk/python/.gitattributes create mode 100644 sdk/python/.gitignore create mode 100644 sdk/python/LICENSE create mode 100644 sdk/python/Pulumi.yaml create mode 100644 sdk/python/README.md create mode 100644 sdk/python/pulumi_dokploy/README.md create mode 100644 sdk/python/pulumi_dokploy/__init__.py create mode 100644 sdk/python/pulumi_dokploy/_utilities.py create mode 100644 sdk/python/pulumi_dokploy/application.py create mode 100644 sdk/python/pulumi_dokploy/certificate.py create mode 100644 sdk/python/pulumi_dokploy/compose.py create mode 100644 sdk/python/pulumi_dokploy/config/__init__.py create mode 100644 sdk/python/pulumi_dokploy/config/__init__.pyi create mode 100644 sdk/python/pulumi_dokploy/config/vars.py create mode 100644 sdk/python/pulumi_dokploy/destination.py create mode 100644 sdk/python/pulumi_dokploy/domain.py create mode 100644 sdk/python/pulumi_dokploy/environment.py create mode 100644 sdk/python/pulumi_dokploy/get_application.py create mode 100644 sdk/python/pulumi_dokploy/get_environment.py create mode 100644 sdk/python/pulumi_dokploy/get_project.py create mode 100644 sdk/python/pulumi_dokploy/get_projects.py create mode 100644 sdk/python/pulumi_dokploy/get_servers.py create mode 100644 sdk/python/pulumi_dokploy/maria_db.py create mode 100644 sdk/python/pulumi_dokploy/mongo.py create mode 100644 sdk/python/pulumi_dokploy/mount.py create mode 100644 sdk/python/pulumi_dokploy/my_sql.py create mode 100644 sdk/python/pulumi_dokploy/outputs.py create mode 100644 sdk/python/pulumi_dokploy/port.py create mode 100644 sdk/python/pulumi_dokploy/postgres.py create mode 100644 sdk/python/pulumi_dokploy/project.py create mode 100644 sdk/python/pulumi_dokploy/provider.py create mode 100644 sdk/python/pulumi_dokploy/pulumi-plugin.json create mode 100644 sdk/python/pulumi_dokploy/py.typed create mode 100644 sdk/python/pulumi_dokploy/redirect.py create mode 100644 sdk/python/pulumi_dokploy/redis.py create mode 100644 sdk/python/pulumi_dokploy/registry.py create mode 100644 sdk/python/pulumi_dokploy/security.py create mode 100644 sdk/python/pulumi_dokploy/ssh_key.py create mode 100644 sdk/python/pyproject.toml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..8791783 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,79 @@ +name: build + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: {} + +env: + GO_VERSION: "1.25.x" + NODE_VERSION: "20.x" + PYTHON_VERSION: "3.11" + DOTNET_VERSION: "8.0.x" + # The provider's go.mod carries a local `replace` for the upstream Terraform + # provider, so it has to sit next to this checkout under this exact name. + UPSTREAM_REPO: maxvojtkov/terraform-provider-dokploy + UPSTREAM_DIR: dokploy-teraform + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout pulumi-dokploy + uses: actions/checkout@v4 + with: + path: pulumi-dokploy + + - name: Checkout upstream Terraform provider + uses: actions/checkout@v4 + with: + repository: ${{ env.UPSTREAM_REPO }} + path: ${{ env.UPSTREAM_DIR }} + + - uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + cache-dependency-path: | + pulumi-dokploy/provider/go.sum + pulumi-dokploy/sdk/go.sum + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - uses: pulumi/actions@v6 + + - name: Lint provider + working-directory: pulumi-dokploy + run: make lint + + - name: Build provider plugin + working-directory: pulumi-dokploy + run: make provider + + - name: Fail if the checked-in schema is stale + working-directory: pulumi-dokploy + run: git diff --exit-code -- provider/cmd/pulumi-resource-dokploy/schema.json + provider/cmd/pulumi-resource-dokploy/bridge-metadata.json + + - name: Build SDKs + working-directory: pulumi-dokploy + run: make build_sdks + + - name: Build Go SDK + working-directory: pulumi-dokploy/sdk + run: go build ./... + + - name: Build .NET SDK + working-directory: pulumi-dokploy/sdk/dotnet + run: dotnet build --nologo diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..4e9716b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,121 @@ +name: release + +on: + push: + tags: + - "v*.*.*" + +permissions: + contents: write + +env: + GO_VERSION: "1.25.x" + NODE_VERSION: "20.x" + PYTHON_VERSION: "3.11" + DOTNET_VERSION: "8.0.x" + UPSTREAM_REPO: maxvojtkov/terraform-provider-dokploy + UPSTREAM_DIR: dokploy-teraform + +jobs: + # Publishes the plugin binaries. Pulumi resolves them from this release via + # the provider's `github://api.github.com/maxvojtkov/pulumi-dokploy` URL. + plugin: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: pulumi-dokploy + fetch-depth: 0 + + - uses: actions/checkout@v4 + with: + repository: ${{ env.UPSTREAM_REPO }} + path: ${{ env.UPSTREAM_DIR }} + + - uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + + - uses: goreleaser/goreleaser-action@v6 + with: + version: latest + args: release --clean + workdir: pulumi-dokploy + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + sdks: + needs: plugin + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: pulumi-dokploy + + - uses: actions/checkout@v4 + with: + repository: ${{ env.UPSTREAM_REPO }} + path: ${{ env.UPSTREAM_DIR }} + + - uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + registry-url: https://registry.npmjs.org + + - uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: Derive version from tag + run: echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV" + + - name: Build SDKs + working-directory: pulumi-dokploy + run: make build_sdks VERSION=${{ env.VERSION }} + + - name: Publish to npm + working-directory: pulumi-dokploy/sdk/nodejs/bin + run: npm publish --access public + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish to PyPI + working-directory: pulumi-dokploy/sdk/python + run: | + python -m pip install --upgrade build twine + python -m build + python -m twine upload dist/* + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + + - name: Publish to NuGet + working-directory: pulumi-dokploy/sdk/dotnet + run: | + dotnet pack --configuration Release --output ./nupkg + dotnet nuget push ./nupkg/*.nupkg \ + --source https://api.nuget.org/v3/index.json \ + --api-key "$NUGET_PUBLISH_KEY" --skip-duplicate + env: + NUGET_PUBLISH_KEY: ${{ secrets.NUGET_PUBLISH_KEY }} + + # Go modules are consumed straight from the repository, so the generated + # SDK has to be committed and tagged as `sdk/vX.Y.Z`. + - name: Commit and tag the Go SDK + working-directory: pulumi-dokploy + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add sdk provider/cmd/pulumi-resource-dokploy/schema.json \ + provider/cmd/pulumi-resource-dokploy/bridge-metadata.json + git diff --cached --quiet || git commit -m "chore: SDKs for v${{ env.VERSION }}" + git tag "sdk/v${{ env.VERSION }}" + git push origin HEAD:main --tags diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f7a087 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Provider and codegen binaries +/bin/ + +# The generated SDKs under sdk/ ARE committed — Go module consumers fetch them +# straight from this repo. Only their build output is ignored. +/sdk/nodejs/bin/ +/sdk/nodejs/node_modules/ +/sdk/dotnet/bin/ +/sdk/dotnet/obj/ +/sdk/python/build/ +/sdk/python/dist/ +/sdk/python/*.egg-info/ +__pycache__/ +*.tsbuildinfo + +# Pulumi stack state from examples +Pulumi.*.yaml +!examples/**/Pulumi.yaml +.pulumi/ + +# Go +vendor/ +*.test +coverage.out + +# Example dependencies +/examples/**/node_modules/ +/examples/**/package-lock.json +/examples/**/venv/ diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..b0c4781 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,55 @@ +# Builds the provider plugin for every platform Pulumi supports and publishes +# the archives to a GitHub release. The archive names must match what +# `PluginDownloadURL: github://api.github.com/maxvojtkov/pulumi-dokploy` +# expects, so do not rename them. +version: 2 + +project_name: pulumi-dokploy + +before: + hooks: + - go -C provider mod download + +builds: + - id: pulumi-resource-dokploy + dir: provider + main: ./cmd/pulumi-resource-dokploy + binary: pulumi-resource-dokploy + env: + - CGO_ENABLED=0 + flags: + - -trimpath + ldflags: + - -s -w + - -X github.com/maxvojtkov/pulumi-dokploy/provider/pkg/version.Version={{ .Version }} + goos: + - darwin + - linux + - windows + goarch: + - amd64 + - arm64 + +archives: + - id: plugin + formats: [tar.gz] + name_template: "{{ .Binary }}-v{{ .Version }}-{{ .Os }}-{{ .Arch }}" + files: + - none* + +checksum: + name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" + +snapshot: + version_template: "{{ .Version }}-SNAPSHOT" + +changelog: + use: github + filters: + exclude: + - "^docs:" + - "^chore:" + - "^test:" + +release: + prerelease: auto diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..77ea901 --- /dev/null +++ b/LICENSE @@ -0,0 +1,356 @@ +Copyright (c) 2026 Max Vojtkov + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e78e9cc --- /dev/null +++ b/Makefile @@ -0,0 +1,89 @@ +PACK := dokploy +ORG := maxvojtkov +PROJECT := github.com/$(ORG)/pulumi-$(PACK) +PROVIDER_PATH := provider +VERSION_PATH := $(PROVIDER_PATH)/pkg/version.Version + +TFGEN := pulumi-tfgen-$(PACK) +PROVIDER := pulumi-resource-$(PACK) + +WORKING_DIR := $(shell pwd) +SCHEMA_DIR := $(WORKING_DIR)/provider/cmd/$(PROVIDER) + +# Override on the command line for a release build, e.g. `make build VERSION=0.2.0`. +VERSION ?= 0.1.0 +LDFLAGS := -X $(PROJECT)/$(VERSION_PATH)=$(VERSION) + +JAVASCRIPT_PKG := @$(ORG)/pulumi-$(PACK) +PYTHON_PKG := pulumi_$(PACK) + +.PHONY: default +default: provider build_sdks ## Build the provider plugin and all SDKs + +# ---------------------------------------------------------------- code gen --- + +.PHONY: tfgen +tfgen: ## Regenerate schema.json and bridge-metadata.json + (cd provider && go build -o $(WORKING_DIR)/bin/$(TFGEN) -ldflags "$(LDFLAGS)" $(PROJECT)/$(PROVIDER_PATH)/cmd/$(TFGEN)) + $(WORKING_DIR)/bin/$(TFGEN) schema --out $(SCHEMA_DIR) + +.PHONY: provider +provider: tfgen ## Build the provider plugin binary into bin/ + (cd provider && go build -o $(WORKING_DIR)/bin/$(PROVIDER) -ldflags "$(LDFLAGS)" $(PROJECT)/$(PROVIDER_PATH)/cmd/$(PROVIDER)) + +.PHONY: build_sdks +build_sdks: build_nodejs build_python build_go build_dotnet ## Generate every language SDK + +# sdk/nodejs/bin is what gets published to npm, so package.json and the docs +# have to be copied in next to the compiled JavaScript. +.PHONY: build_nodejs +build_nodejs: tfgen + rm -rf sdk/nodejs + $(WORKING_DIR)/bin/$(TFGEN) nodejs --out sdk/nodejs/ + cd sdk/nodejs && npm install && npm run build + cp README.md LICENSE sdk/nodejs/package.json sdk/nodejs/bin/ + +.PHONY: build_python +build_python: tfgen + rm -rf sdk/python + $(WORKING_DIR)/bin/$(TFGEN) python --out sdk/python/ + cp README.md LICENSE sdk/python/ + +.PHONY: build_go +build_go: tfgen + rm -rf sdk/go + $(WORKING_DIR)/bin/$(TFGEN) go --out sdk/go/ + +.PHONY: build_dotnet +build_dotnet: tfgen + rm -rf sdk/dotnet + $(WORKING_DIR)/bin/$(TFGEN) dotnet --out sdk/dotnet/ + cp README.md LICENSE sdk/dotnet/ + printf "$(VERSION)" > sdk/dotnet/version.txt + +# ------------------------------------------------------------------ local ---- + +.PHONY: install +install: provider install_nodejs_sdk ## Install the plugin locally so `pulumi up` can find it + pulumi plugin install resource $(PACK) $(VERSION) --file $(WORKING_DIR)/bin/$(PROVIDER) --reinstall + +.PHONY: install_nodejs_sdk +install_nodejs_sdk: + @if [ -d sdk/nodejs/bin ]; then yarn link --cwd sdk/nodejs/bin; fi + +.PHONY: lint +lint: ## Vet and format-check the provider sources + cd provider && go vet ./... && test -z "$$(gofmt -l .)" + +.PHONY: test +test: ## Run provider unit tests + cd provider && go test ./... -count=1 + +.PHONY: clean +clean: ## Remove build artifacts and generated SDKs + rm -rf bin sdk/nodejs sdk/python sdk/go sdk/dotnet + +.PHONY: help +help: + @grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \ + | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}' diff --git a/README.md b/README.md new file mode 100644 index 0000000..e7dbe6e --- /dev/null +++ b/README.md @@ -0,0 +1,206 @@ +# pulumi-dokploy + +A Pulumi provider for [Dokploy](https://dokploy.com): projects, environments, +applications, Compose stacks, managed databases, domains, mounts, ports, +redirects, basic auth, registries, SSH keys, certificates and backup +destinations. + +This is a *bridged* provider. All of the behaviour lives in +[`terraform-provider-dokploy`](https://github.com/maxvojtkov/terraform-provider-dokploy); +[`pulumi-terraform-bridge`](https://github.com/pulumi/pulumi-terraform-bridge) +turns it into a Pulumi package with typed SDKs for TypeScript, Python, Go and +.NET. The two providers stay in lockstep — a resource added upstream shows up +here after a `make tfgen`. + +```ts +import * as dokploy from "@maxvojtkov/pulumi-dokploy"; + +const shop = new dokploy.Project("shop", { name: "shop" }); + +const db = new dokploy.Postgres("db", { + name: "shop-db", + environmentId: shop.defaultEnvironmentId, + dockerImage: "postgres:16-alpine", + databaseName: "shop", + databaseUser: "shop", + databasePassword: dbPassword, +}); + +const api = new dokploy.Application("api", { + name: "api", + environmentId: shop.defaultEnvironmentId, + sourceType: "docker", + dockerImage: "ghcr.io/acme/api:1.4.0", + env: pulumi.interpolate`DATABASE_URL=postgresql://shop:${dbPassword}@${db.appName}:5432/shop`, +}); + +new dokploy.Domain("api", { + applicationId: api.id, + domainType: "application", + host: "api.example.com", + port: 3000, + https: true, + certificateType: "letsencrypt", +}); +``` + +## Contents + +- [Installing](#installing) +- [Configuration](#configuration) +- [Resources and data sources](#resources-and-data-sources) +- [Differences from the Terraform provider](#differences-from-the-terraform-provider) +- [Examples](#examples) +- [Development](#development) +- [Releasing](#releasing) + +## Installing + +The SDKs are published per language; the plugin binary is resolved +automatically from this repository's GitHub releases. + +```bash +# TypeScript / JavaScript +npm install @maxvojtkov/pulumi-dokploy + +# Python +pip install pulumi_dokploy + +# Go +go get github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy + +# .NET +dotnet add package Maxvojtkov.Dokploy +``` + +Before the first release, build and install it locally instead: + +```bash +make install VERSION=0.1.0 +``` + +That drops `pulumi-resource-dokploy` into the local plugin cache, so +`pulumi up` finds it without a network fetch. + +### Do I need the static SDK? + +Not necessarily. Pulumi can consume the Terraform provider directly, with no +build step and no published SDK: + +```bash +pulumi package add terraform-provider maxvojtkov/dokploy +``` + +That generates a local SDK on the spot and is the fastest way to try things. +Use this repository when you want a *versioned, published* package — stable +tokens across releases, real package-manager installs, and SDKs your teammates +can depend on without a codegen step. + +## Configuration + +| Setting | Environment variable | Required | Description | +| ---------------------- | ------------------------- | -------- | --------------------------------------------------------------------------- | +| `dokploy:host` | `DOKPLOY_HOST` | yes | Base URL of the instance, e.g. `https://dokploy.example.com`. Trailing `/api` optional. | +| `dokploy:apiKey` | `DOKPLOY_API_KEY` | yes | Token from *Settings → Profile → API/CLI*. Always treated as a secret. | +| `dokploy:timeoutSeconds` | `DOKPLOY_TIMEOUT_SECONDS` | no | Per-request timeout. Defaults to `60`. | +| `dokploy:insecureSkipVerify` | — | no | Skip TLS verification. Only for self-signed certificates. | + +```bash +pulumi config set dokploy:host https://dokploy.example.com +pulumi config set --secret dokploy:apiKey "$DOKPLOY_API_KEY" +``` + +## Resources and data sources + +| Group | Resources | +| ------------ | ------------------------------------------------------------------------- | +| Structure | `Project`, `Environment` | +| Services | `Application`, `Compose` | +| Databases | `Postgres`, `MySql`, `MariaDb`, `Mongo`, `Redis` | +| Networking | `Domain`, `Mount`, `Port`, `Redirect`, `Security` | +| Account | `Registry`, `SshKey`, `Certificate`, `Destination` | + +Data sources: `getProject`, `getProjects`, `getEnvironment`, `getApplication`, +`getServers`. + +## Differences from the Terraform provider + +Everything is a mechanical translation of the Terraform provider, with three +Pulumi conventions applied on top: + +- **Attribute names are camelCase.** `environment_id` → `environmentId`, + `default_environment_id` → `defaultEnvironmentId`, and so on. +- **`name` is auto-generated when you omit it.** Pulumi appends a random + suffix to the logical resource name, the same way the AWS provider does. Pass + `name` explicitly whenever the Dokploy-side name matters to you. +- **The `web-service` Terraform module has no direct equivalent.** Write it as + a [ComponentResource](https://www.pulumi.com/docs/concepts/resources/components/) + instead — see [`examples/typescript/webService.ts`](examples/typescript/webService.ts), + which is a port of that module. + +The [known API quirks](https://github.com/maxvojtkov/terraform-provider-dokploy#known-api-quirks) +documented upstream apply here unchanged, because it is the same code doing the +work. + +## Examples + +- [`examples/typescript`](examples/typescript) — a full environment: project, + staging environment, Postgres, Redis, a GitHub-built web service behind a + domain, a basic-auth-protected internal tool, and a Compose stack. +- [`examples/python`](examples/python) — a small project, database and app. + +## Development + +Requirements: Go 1.25+, Node 20+, Python 3.9+, .NET 8+, and `pulumi`. + +```bash +make tfgen # regenerate schema.json and bridge-metadata.json +make provider # build the plugin binary into bin/ +make build_sdks # regenerate all four SDKs +make install # install the plugin into the local Pulumi plugin cache +make lint test +``` + +`provider/resources.go` is the whole mapping layer: Terraform type names to +Pulumi tokens, and Terraform provider configuration to Pulumi configuration. +Adding an upstream resource means adding one line there and re-running +`make tfgen build_sdks`. + +### The upstream dependency + +`provider/go.mod` currently carries: + +``` +replace github.com/maxvojtkov/terraform-provider-dokploy => ../../dokploy-teraform +``` + +so the two repositories can be developed side by side. CI reproduces that +layout by checking the upstream provider out as a sibling directory. Once +`terraform-provider-dokploy` is tagged on GitHub, drop the `replace` and pin a +real version instead: + +```bash +cd provider && go mod edit -dropreplace github.com/maxvojtkov/terraform-provider-dokploy \ + && go get github.com/maxvojtkov/terraform-provider-dokploy@v0.1.0 +``` + +The upstream provider exposes itself through its `shim` package +(`shim.NewProvider(version)`), because `internal/provider` is not importable +from outside that module. + +## Releasing + +Tag the repository and the `release` workflow does the rest: + +```bash +git tag v0.1.0 && git push origin v0.1.0 +``` + +It publishes plugin binaries to a GitHub release via GoReleaser, pushes the +npm / PyPI / NuGet packages, and commits and tags the Go SDK as `sdk/v0.1.0`. +The workflow needs three repository secrets: `NPM_TOKEN`, `PYPI_API_TOKEN` and +`NUGET_PUBLISH_KEY`. + +## License + +[MPL-2.0](LICENSE). diff --git a/examples/python/Pulumi.yaml b/examples/python/Pulumi.yaml new file mode 100644 index 0000000..8008f2a --- /dev/null +++ b/examples/python/Pulumi.yaml @@ -0,0 +1,7 @@ +name: dokploy-python +runtime: + name: python + options: + toolchain: pip + virtualenv: venv +description: A small Dokploy stack built with Pulumi and Python diff --git a/examples/python/__main__.py b/examples/python/__main__.py new file mode 100644 index 0000000..6b5f8fb --- /dev/null +++ b/examples/python/__main__.py @@ -0,0 +1,59 @@ +"""A small Dokploy stack: a project, a Postgres instance and a public app. + + export DOKPLOY_HOST=https://dokploy.example.com + export DOKPLOY_API_KEY=... + pulumi up +""" + +import pulumi +import pulumi_dokploy as dokploy +import pulumi_random as random + +shop = dokploy.Project( + "shop", + name="shop", + description="Storefront and its backing services", +) + +db_password = random.RandomPassword("postgres", length=32, special=False) + +db = dokploy.Postgres( + "db", + name="shop-db", + environment_id=shop.default_environment_id, + docker_image="postgres:16-alpine", + database_name="shop", + database_user="shop", + database_password=db_password.result, + memory_limit="1g", +) + +# Dokploy resolves service names on the shared Docker network, so the database +# is reachable by its generated app_name. +database_url = pulumi.Output.all(db.app_name, db_password.result).apply( + lambda args: f"DATABASE_URL=postgresql://shop:{args[1]}@{args[0]}:5432/shop" +) + +api = dokploy.Application( + "api", + name="api", + environment_id=shop.default_environment_id, + source_type="docker", + docker_image="ghcr.io/acme/api:1.4.0", + env=database_url, + replicas=2, + memory_limit="512m", +) + +dokploy.Domain( + "api", + application_id=api.id, + domain_type="application", + host="api.example.com", + port=3000, + https=True, + certificate_type="letsencrypt", +) + +pulumi.export("project_id", shop.id) +pulumi.export("api_id", api.id) diff --git a/examples/python/requirements.txt b/examples/python/requirements.txt new file mode 100644 index 0000000..f7f9b0e --- /dev/null +++ b/examples/python/requirements.txt @@ -0,0 +1,3 @@ +pulumi>=3.0.0,<4.0.0 +pulumi-random>=4.0.0,<5.0.0 +pulumi_dokploy>=0.1.0,<1.0.0 diff --git a/examples/typescript/Pulumi.yaml b/examples/typescript/Pulumi.yaml new file mode 100644 index 0000000..528f8c6 --- /dev/null +++ b/examples/typescript/Pulumi.yaml @@ -0,0 +1,9 @@ +name: dokploy-complete +runtime: nodejs +description: A complete Dokploy environment built with Pulumi +config: + dokploy-complete:githubProviderId: + description: ID of the GitHub provider configured in Dokploy + dokploy-complete:adminPassword: + description: Basic-auth password for the staging admin tool + secret: true diff --git a/examples/typescript/index.ts b/examples/typescript/index.ts new file mode 100644 index 0000000..fc3493f --- /dev/null +++ b/examples/typescript/index.ts @@ -0,0 +1,148 @@ +// A complete Dokploy environment: a project, a staging environment, a public +// web service with a database and a cache behind it, and a Compose stack. +// +// export DOKPLOY_HOST=https://dokploy.example.com +// export DOKPLOY_API_KEY=... +// pulumi up + +import * as pulumi from "@pulumi/pulumi"; +import * as random from "@pulumi/random"; +import * as dokploy from "@maxvojtkov/pulumi-dokploy"; + +import { WebService } from "./webService"; + +const config = new pulumi.Config(); +const githubProviderId = config.require("githubProviderId"); +const adminPassword = config.requireSecret("adminPassword"); + +// ---------------------------------------------------------------- structure + +const shop = new dokploy.Project("shop", { + name: "shop", + description: "Storefront and its backing services", + // Shared by every service in the project. + env: "TZ=Europe/Bucharest", +}); + +// Dokploy creates a default "production" environment with the project; add a +// second one for staging. +const staging = new dokploy.Environment("staging", { + name: "staging", + description: "Pre-production", + projectId: shop.id, + env: "LOG_LEVEL=debug", +}); + +// ------------------------------------------------------------------ secrets + +const postgresPassword = new random.RandomPassword("postgres", { length: 32, special: false }); +const redisPassword = new random.RandomPassword("redis", { length: 32, special: false }); + +// --------------------------------------------------------------- datastores + +const db = new dokploy.Postgres("db", { + name: "shop-db", + environmentId: shop.defaultEnvironmentId, + dockerImage: "postgres:16-alpine", + databaseName: "shop", + databaseUser: "shop", + databasePassword: postgresPassword.result, + memoryLimit: "1g", + cpuLimit: "1", + memoryReservation: "256m", +}); + +const cache = new dokploy.Redis("cache", { + name: "shop-cache", + environmentId: shop.defaultEnvironmentId, + dockerImage: "redis:7-alpine", + databasePassword: redisPassword.result, + memoryLimit: "256m", +}); + +// ----------------------------------------------------------- the web service + +// Dokploy resolves service names on the shared Docker network, so the database +// is reachable by its generated appName. +const storefrontEnv = pulumi + .all([db.appName, postgresPassword.result, cache.appName, redisPassword.result]) + .apply(([dbHost, dbPass, cacheHost, cachePass]) => [ + `DATABASE_URL=postgresql://shop:${dbPass}@${dbHost}:5432/shop`, + `REDIS_URL=redis://:${cachePass}@${cacheHost}:6379`, + "NODE_ENV=production", + ].join("\n")); + +const storefront = new WebService("storefront", { + environmentId: shop.defaultEnvironmentId, + description: "Public storefront", + github: { + githubId: githubProviderId, + owner: "acme", + repository: "storefront", + branch: "main", + }, + env: storefrontEnv, + replicas: 2, + memoryLimit: "1g", + cpuLimit: "1", + domains: [{ host: "shop.example.com", port: 3000 }], +}); + +new dokploy.Redirect("storefront-www", { + applicationId: storefront.application.id, + regex: String.raw`^https://www\.shop\.example\.com/(.*)`, + replacement: "https://shop.example.com/${1}", + permanent: true, +}); + +new dokploy.Mount("storefront-uploads", { + serviceId: storefront.application.id, + serviceType: "application", + type: "volume", + mountPath: "/app/uploads", + volumeName: "storefront-uploads", +}); + +// ------------------------------- an internal tool behind basic auth (staging) + +new WebService("admin", { + environmentId: staging.id, + dockerImage: "traefik/whoami:latest", + domains: [{ host: "admin.staging.example.com", port: 80 }], + basicAuth: { username: "ops", password: adminPassword }, +}); + +// -------------------------------------------------------------- compose stack + +const observability = new dokploy.Compose("observability", { + name: "observability", + environmentId: shop.defaultEnvironmentId, + composeType: "docker-compose", + sourceType: "raw", + // Preserve volumes if this stack is ever destroyed. + deleteVolumes: false, + composeFile: `services: + uptime: + image: louislam/uptime-kuma:1 + volumes: + - uptime-data:/app/data + restart: unless-stopped + +volumes: + uptime-data: +`, +}); + +new dokploy.Domain("observability", { + composeId: observability.id, + domainType: "compose", + serviceName: "uptime", + host: "status.example.com", + port: 3001, + https: true, + certificateType: "letsencrypt", +}); + +export const projectId = shop.id; +export const stagingEnvironmentId = staging.id; +export const storefrontUrl = "https://shop.example.com"; diff --git a/examples/typescript/package.json b/examples/typescript/package.json new file mode 100644 index 0000000..b84c396 --- /dev/null +++ b/examples/typescript/package.json @@ -0,0 +1,12 @@ +{ + "name": "dokploy-complete", + "devDependencies": { + "@types/node": "^18.19.130", + "typescript": "^5.9.3" + }, + "dependencies": { + "@maxvojtkov/pulumi-dokploy": "file:../../sdk/nodejs", + "@pulumi/pulumi": "^3.256.0", + "@pulumi/random": "^4.21.1" + } +} diff --git a/examples/typescript/tsconfig.json b/examples/typescript/tsconfig.json new file mode 100644 index 0000000..747eed1 --- /dev/null +++ b/examples/typescript/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "strict": true, + "outDir": "bin", + "target": "es2020", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "experimentalDecorators": true, + "pretty": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "forceConsistentCasingInFileNames": true + }, + "files": ["index.ts", "webService.ts"] +} diff --git a/examples/typescript/webService.ts b/examples/typescript/webService.ts new file mode 100644 index 0000000..c642dfa --- /dev/null +++ b/examples/typescript/webService.ts @@ -0,0 +1,93 @@ +import * as pulumi from "@pulumi/pulumi"; +import * as dokploy from "@maxvojtkov/pulumi-dokploy"; + +export interface DomainSpec { + host: string; + port: number; + https?: boolean; + path?: string; +} + +export interface WebServiceArgs { + environmentId: pulumi.Input; + description?: pulumi.Input; + + /** Either a prebuilt image or a GitHub repository, not both. */ + dockerImage?: pulumi.Input; + github?: { + githubId: pulumi.Input; + owner: pulumi.Input; + repository: pulumi.Input; + branch: pulumi.Input; + }; + + env?: pulumi.Input; + replicas?: pulumi.Input; + memoryLimit?: pulumi.Input; + cpuLimit?: pulumi.Input; + + domains?: DomainSpec[]; + /** username/password pair to put the whole service behind basic auth. */ + basicAuth?: { username: pulumi.Input; password: pulumi.Input }; +} + +/** + * WebService bundles an application with its domains and access control — the + * Pulumi equivalent of the `web-service` Terraform module. + */ +export class WebService extends pulumi.ComponentResource { + public readonly application: dokploy.Application; + public readonly domains: dokploy.Domain[]; + + constructor(name: string, args: WebServiceArgs, opts?: pulumi.ComponentResourceOptions) { + super("dokploy:index:WebService", name, {}, opts); + const child = { parent: this }; + + this.application = new dokploy.Application(name, { + name, + environmentId: args.environmentId, + description: args.description, + env: args.env, + replicas: args.replicas, + memoryLimit: args.memoryLimit, + cpuLimit: args.cpuLimit, + ...(args.github + ? { + sourceType: "github", + buildType: "nixpacks", + autoDeploy: true, + githubId: args.github.githubId, + owner: args.github.owner, + repository: args.github.repository, + branch: args.github.branch, + } + : { + sourceType: "docker", + dockerImage: args.dockerImage, + }), + }, child); + + this.domains = (args.domains ?? []).map((d, i) => new dokploy.Domain(`${name}-domain-${i}`, { + applicationId: this.application.id, + domainType: "application", + host: d.host, + port: d.port, + path: d.path, + https: d.https ?? true, + certificateType: (d.https ?? true) ? "letsencrypt" : "none", + }, child)); + + if (args.basicAuth) { + new dokploy.Security(`${name}-auth`, { + applicationId: this.application.id, + username: args.basicAuth.username, + password: args.basicAuth.password, + }, child); + } + + this.registerOutputs({ + application: this.application, + domains: this.domains, + }); + } +} diff --git a/provider/cmd/pulumi-resource-dokploy/Pulumi.yaml b/provider/cmd/pulumi-resource-dokploy/Pulumi.yaml new file mode 100644 index 0000000..b05ea86 --- /dev/null +++ b/provider/cmd/pulumi-resource-dokploy/Pulumi.yaml @@ -0,0 +1,3 @@ +name: dokploy +description: A Pulumi resource provider for dokploy. +language: schema diff --git a/provider/cmd/pulumi-resource-dokploy/bridge-metadata.json b/provider/cmd/pulumi-resource-dokploy/bridge-metadata.json new file mode 100644 index 0000000..50b4a33 --- /dev/null +++ b/provider/cmd/pulumi-resource-dokploy/bridge-metadata.json @@ -0,0 +1,162 @@ +{ + "auto-aliasing": { + "resources": { + "dokploy_application": { + "current": "dokploy:index/application:Application", + "fields": { + "args": { + "maxItemsOne": false + }, + "network_ids": { + "maxItemsOne": false + }, + "preview_labels": { + "maxItemsOne": false + }, + "watch_paths": { + "maxItemsOne": false + } + } + }, + "dokploy_certificate": { + "current": "dokploy:index/certificate:Certificate" + }, + "dokploy_compose": { + "current": "dokploy:index/compose:Compose", + "fields": { + "watch_paths": { + "maxItemsOne": false + } + } + }, + "dokploy_destination": { + "current": "dokploy:index/destination:Destination", + "fields": { + "additional_flags": { + "maxItemsOne": false + } + } + }, + "dokploy_domain": { + "current": "dokploy:index/domain:Domain", + "fields": { + "middlewares": { + "maxItemsOne": false + } + } + }, + "dokploy_environment": { + "current": "dokploy:index/environment:Environment" + }, + "dokploy_mariadb": { + "current": "dokploy:index/mariaDb:MariaDb", + "fields": { + "args": { + "maxItemsOne": false + }, + "network_ids": { + "maxItemsOne": false + } + } + }, + "dokploy_mongo": { + "current": "dokploy:index/mongo:Mongo", + "fields": { + "args": { + "maxItemsOne": false + }, + "network_ids": { + "maxItemsOne": false + } + } + }, + "dokploy_mount": { + "current": "dokploy:index/mount:Mount" + }, + "dokploy_mysql": { + "current": "dokploy:index/mySql:MySql", + "fields": { + "args": { + "maxItemsOne": false + }, + "network_ids": { + "maxItemsOne": false + } + } + }, + "dokploy_port": { + "current": "dokploy:index/port:Port" + }, + "dokploy_postgres": { + "current": "dokploy:index/postgres:Postgres", + "fields": { + "args": { + "maxItemsOne": false + }, + "network_ids": { + "maxItemsOne": false + } + } + }, + "dokploy_project": { + "current": "dokploy:index/project:Project" + }, + "dokploy_redirect": { + "current": "dokploy:index/redirect:Redirect" + }, + "dokploy_redis": { + "current": "dokploy:index/redis:Redis", + "fields": { + "args": { + "maxItemsOne": false + }, + "network_ids": { + "maxItemsOne": false + } + } + }, + "dokploy_registry": { + "current": "dokploy:index/registry:Registry" + }, + "dokploy_security": { + "current": "dokploy:index/security:Security" + }, + "dokploy_ssh_key": { + "current": "dokploy:index/sshKey:SshKey" + } + }, + "datasources": { + "dokploy_application": { + "current": "dokploy:index/getApplication:getApplication" + }, + "dokploy_environment": { + "current": "dokploy:index/getEnvironment:getEnvironment" + }, + "dokploy_project": { + "current": "dokploy:index/getProject:getProject", + "fields": { + "environments": { + "maxItemsOne": false + } + } + }, + "dokploy_projects": { + "current": "dokploy:index/getProjects:getProjects", + "fields": { + "projects": { + "maxItemsOne": false + } + } + }, + "dokploy_servers": { + "current": "dokploy:index/getServers:getServers", + "fields": { + "servers": { + "maxItemsOne": false + } + } + } + } + }, + "auto-settings": {} +} \ No newline at end of file diff --git a/provider/cmd/pulumi-resource-dokploy/main.go b/provider/cmd/pulumi-resource-dokploy/main.go new file mode 100644 index 0000000..6cfae15 --- /dev/null +++ b/provider/cmd/pulumi-resource-dokploy/main.go @@ -0,0 +1,23 @@ +// pulumi-resource-dokploy is the Pulumi provider plugin for Dokploy. It serves +// the bridged Terraform provider together with the schema baked in at build +// time by `make tfgen`. +package main + +import ( + "context" + _ "embed" + + "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/pf/tfbridge" + + dokploy "github.com/maxvojtkov/pulumi-dokploy/provider" + "github.com/maxvojtkov/pulumi-dokploy/provider/pkg/version" +) + +//go:embed schema.json +var pulumiSchema []byte + +func main() { + tfbridge.Main(context.Background(), "dokploy", + dokploy.Provider(version.Version), + tfbridge.ProviderMetadata{PackageSchema: pulumiSchema}) +} diff --git a/provider/cmd/pulumi-resource-dokploy/schema.json b/provider/cmd/pulumi-resource-dokploy/schema.json new file mode 100644 index 0000000..4b299d7 --- /dev/null +++ b/provider/cmd/pulumi-resource-dokploy/schema.json @@ -0,0 +1,5720 @@ +{ + "name": "dokploy", + "displayName": "Dokploy", + "description": "A Pulumi package for creating and managing Dokploy resources", + "keywords": [ + "pulumi", + "dokploy", + "paas", + "docker", + "deployment", + "category/cloud", + "category/infrastructure" + ], + "homepage": "https://github.com/maxvojtkov/pulumi-dokploy", + "license": "MPL-2.0", + "attribution": "This Pulumi package is based on the [`dokploy` Terraform Provider](https://github.com/maxvojtkov/terraform-provider-dokploy).", + "repository": "https://github.com/maxvojtkov/pulumi-dokploy", + "pluginDownloadURL": "github://api.github.com/maxvojtkov/pulumi-dokploy", + "publisher": "maxvojtkov", + "meta": { + "moduleFormat": "(.*)(?:/[^/]*)" + }, + "language": { + "csharp": { + "packageReferences": { + "Pulumi": "3.*" + }, + "compatibility": "tfbridge20", + "rootNamespace": "Maxvojtkov", + "respectSchemaVersion": true + }, + "go": { + "importBasePath": "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy", + "generateResourceContainerTypes": true, + "generateExtraInputTypes": true, + "respectSchemaVersion": true + }, + "nodejs": { + "packageName": "@maxvojtkov/pulumi-dokploy", + "packageDescription": "A Pulumi package for creating and managing Dokploy resources. Based on terraform-provider-dokploy: version v0.1.0", + "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/maxvojtkov/terraform-provider-dokploy)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-dokploy` repo](https://github.com/maxvojtkov/pulumi-dokploy/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-dokploy` repo](https://github.com/maxvojtkov/terraform-provider-dokploy/issues).", + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^18", + "typescript": "^4.6.0" + }, + "compatibility": "tfbridge20", + "disableUnionOutputTypes": true, + "respectSchemaVersion": true + }, + "python": { + "packageName": "pulumi_dokploy", + "requires": { + "pulumi": "\u003e=3.0.0,\u003c4.0.0" + }, + "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/maxvojtkov/terraform-provider-dokploy)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-dokploy` repo](https://github.com/maxvojtkov/pulumi-dokploy/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-dokploy` repo](https://github.com/maxvojtkov/terraform-provider-dokploy/issues).", + "compatibility": "tfbridge20", + "respectSchemaVersion": true, + "pyproject": { + "enabled": true + } + } + }, + "config": { + "variables": { + "apiKey": { + "type": "string", + "description": "API token generated in Dokploy under *Settings \u003e Profile \u003e API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable.", + "defaultInfo": { + "environment": [ + "DOKPLOY_API_KEY" + ] + }, + "secret": true + }, + "host": { + "type": "string", + "description": "Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable.", + "defaultInfo": { + "environment": [ + "DOKPLOY_HOST" + ] + } + }, + "insecureSkipVerify": { + "type": "boolean", + "description": "Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\" pulumi-lang-hcl=\"`false`\"\u003e`false`\u003c/span\u003e." + }, + "timeoutSeconds": { + "type": "integer", + "description": "Per-request timeout in seconds. Defaults to \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\" pulumi-lang-hcl=\"`60`\"\u003e`60`\u003c/span\u003e. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable.", + "defaultInfo": { + "environment": [ + "DOKPLOY_TIMEOUT_SECONDS" + ] + } + } + } + }, + "types": { + "dokploy:index/getProjectEnvironment:getProjectEnvironment": { + "properties": { + "id": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "required": [ + "id", + "isDefault", + "name" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "dokploy:index/getProjectsProject:getProjectsProject": { + "properties": { + "defaultEnvironmentId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "required": [ + "defaultEnvironmentId", + "description", + "id", + "name" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "dokploy:index/getServersServer:getServersServer": { + "properties": { + "id": { + "type": "string" + }, + "ipAddress": { + "type": "string" + }, + "name": { + "type": "string" + }, + "serverStatus": { + "type": "string" + } + }, + "type": "object", + "required": [ + "id", + "ipAddress", + "name", + "serverStatus" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + } + }, + "provider": { + "description": "The provider type for the dokploy package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n", + "properties": { + "apiKey": { + "type": "string", + "description": "API token generated in Dokploy under *Settings \u003e Profile \u003e API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable.", + "secret": true + }, + "host": { + "type": "string", + "description": "Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable." + }, + "insecureSkipVerify": { + "type": "boolean", + "description": "Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\" pulumi-lang-hcl=\"`false`\"\u003e`false`\u003c/span\u003e." + }, + "timeoutSeconds": { + "type": "integer", + "description": "Per-request timeout in seconds. Defaults to \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\" pulumi-lang-hcl=\"`60`\"\u003e`60`\u003c/span\u003e. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable." + } + }, + "inputProperties": { + "apiKey": { + "type": "string", + "description": "API token generated in Dokploy under *Settings \u003e Profile \u003e API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable.", + "defaultInfo": { + "environment": [ + "DOKPLOY_API_KEY" + ] + }, + "secret": true + }, + "host": { + "type": "string", + "description": "Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable.", + "defaultInfo": { + "environment": [ + "DOKPLOY_HOST" + ] + } + }, + "insecureSkipVerify": { + "type": "boolean", + "description": "Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\" pulumi-lang-hcl=\"`false`\"\u003e`false`\u003c/span\u003e." + }, + "timeoutSeconds": { + "type": "integer", + "description": "Per-request timeout in seconds. Defaults to \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\" pulumi-lang-hcl=\"`60`\"\u003e`60`\u003c/span\u003e. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable.", + "defaultInfo": { + "environment": [ + "DOKPLOY_TIMEOUT_SECONDS" + ] + } + } + }, + "methods": { + "terraformConfig": "pulumi:providers:dokploy/terraformConfig" + } + }, + "resources": { + "dokploy:index/application:Application": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "autoDeploy": { + "type": "boolean", + "description": "Deploy automatically when the configured trigger fires." + }, + "bitbucketBranch": { + "type": "string", + "description": "Bitbucket branch to build." + }, + "bitbucketBuildPath": { + "type": "string", + "description": "Path within the Bitbucket repository to build from." + }, + "bitbucketId": { + "type": "string", + "description": "ID of the configured Bitbucket provider connection." + }, + "bitbucketOwner": { + "type": "string", + "description": "Bitbucket repository owner." + }, + "bitbucketRepository": { + "type": "string", + "description": "Bitbucket repository name." + }, + "bitbucketRepositorySlug": { + "type": "string", + "description": "Bitbucket repository slug." + }, + "branch": { + "type": "string", + "description": "GitHub branch to build." + }, + "buildArgs": { + "type": "string", + "description": "Docker build arguments in `KEY=value` format, one per line." + }, + "buildPath": { + "type": "string", + "description": "Path within the GitHub repository to build from." + }, + "buildRegistryId": { + "type": "string", + "description": "Registry used by a dedicated build server." + }, + "buildSecrets": { + "type": "string", + "description": "Docker build secrets in `KEY=value` format, one per line.", + "secret": true + }, + "buildServerId": { + "type": "string", + "description": "Server that performs builds, when separate from the deploy server." + }, + "buildType": { + "type": "string", + "description": "How the application is built. Valid values: \u003cspan pulumi-lang-nodejs=\"`dockerfile`\" pulumi-lang-dotnet=\"`Dockerfile`\" pulumi-lang-go=\"`dockerfile`\" pulumi-lang-python=\"`dockerfile`\" pulumi-lang-yaml=\"`dockerfile`\" pulumi-lang-java=\"`dockerfile`\" pulumi-lang-hcl=\"`dockerfile`\"\u003e`dockerfile`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`herokuBuildpacks`\" pulumi-lang-dotnet=\"`HerokuBuildpacks`\" pulumi-lang-go=\"`herokuBuildpacks`\" pulumi-lang-python=\"`heroku_buildpacks`\" pulumi-lang-yaml=\"`herokuBuildpacks`\" pulumi-lang-java=\"`herokuBuildpacks`\" pulumi-lang-hcl=\"`heroku_buildpacks`\"\u003e`herokuBuildpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`paketoBuildpacks`\" pulumi-lang-dotnet=\"`PaketoBuildpacks`\" pulumi-lang-go=\"`paketoBuildpacks`\" pulumi-lang-python=\"`paketo_buildpacks`\" pulumi-lang-yaml=\"`paketoBuildpacks`\" pulumi-lang-java=\"`paketoBuildpacks`\" pulumi-lang-hcl=\"`paketo_buildpacks`\"\u003e`paketoBuildpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nixpacks`\" pulumi-lang-dotnet=\"`Nixpacks`\" pulumi-lang-go=\"`nixpacks`\" pulumi-lang-python=\"`nixpacks`\" pulumi-lang-yaml=\"`nixpacks`\" pulumi-lang-java=\"`nixpacks`\" pulumi-lang-hcl=\"`nixpacks`\"\u003e`nixpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\" pulumi-lang-hcl=\"`static`\"\u003e`static`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`railpack`\" pulumi-lang-dotnet=\"`Railpack`\" pulumi-lang-go=\"`railpack`\" pulumi-lang-python=\"`railpack`\" pulumi-lang-yaml=\"`railpack`\" pulumi-lang-java=\"`railpack`\" pulumi-lang-hcl=\"`railpack`\"\u003e`railpack`\u003c/span\u003e." + }, + "cleanCache": { + "type": "boolean", + "description": "Discard the build cache on the next deployment." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createEnvFile": { + "type": "boolean", + "description": "Write the environment variables to a `.env` file in the container." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the application was created." + }, + "customGitBranch": { + "type": "string", + "description": "Branch to build for a custom Git remote." + }, + "customGitBuildPath": { + "type": "string", + "description": "Path within a custom Git repository to build from." + }, + "customGitSshKeyId": { + "type": "string", + "description": "SSH key used to clone a private custom Git remote." + }, + "customGitUrl": { + "type": "string", + "description": "Git remote URL, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerBuildStage": { + "type": "string", + "description": "Target stage for a multi-stage Docker build." + }, + "dockerContextPath": { + "type": "string", + "description": "Docker build context path." + }, + "dockerImage": { + "type": "string", + "description": "Docker image reference, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`docker`\" pulumi-lang-dotnet=\"`Docker`\" pulumi-lang-go=\"`docker`\" pulumi-lang-python=\"`docker`\" pulumi-lang-yaml=\"`docker`\" pulumi-lang-java=\"`docker`\" pulumi-lang-hcl=\"`docker`\"\u003e`docker`\u003c/span\u003e." + }, + "dockerfile": { + "type": "string", + "description": "Path to the Dockerfile, when \u003cspan pulumi-lang-nodejs=\"`buildType`\" pulumi-lang-dotnet=\"`BuildType`\" pulumi-lang-go=\"`buildType`\" pulumi-lang-python=\"`build_type`\" pulumi-lang-yaml=\"`buildType`\" pulumi-lang-java=\"`buildType`\" pulumi-lang-hcl=\"`build_type`\"\u003e`buildType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`dockerfile`\" pulumi-lang-dotnet=\"`Dockerfile`\" pulumi-lang-go=\"`dockerfile`\" pulumi-lang-python=\"`dockerfile`\" pulumi-lang-yaml=\"`dockerfile`\" pulumi-lang-java=\"`dockerfile`\" pulumi-lang-hcl=\"`dockerfile`\"\u003e`dockerfile`\u003c/span\u003e." + }, + "enableSubmodules": { + "type": "boolean", + "description": "Clone Git submodules when checking out the repository." + }, + "enabled": { + "type": "boolean", + "description": "Whether the application is enabled." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Runtime environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this application belongs to." + }, + "giteaBranch": { + "type": "string", + "description": "Gitea branch to build." + }, + "giteaBuildPath": { + "type": "string", + "description": "Path within the Gitea repository to build from." + }, + "giteaId": { + "type": "string", + "description": "ID of the configured Gitea provider connection." + }, + "giteaOwner": { + "type": "string", + "description": "Gitea repository owner." + }, + "giteaRepository": { + "type": "string", + "description": "Gitea repository name." + }, + "githubId": { + "type": "string", + "description": "ID of the configured GitHub provider connection." + }, + "gitlabBranch": { + "type": "string", + "description": "GitLab branch to build." + }, + "gitlabBuildPath": { + "type": "string", + "description": "Path within the GitLab repository to build from." + }, + "gitlabId": { + "type": "string", + "description": "ID of the configured GitLab provider connection." + }, + "gitlabOwner": { + "type": "string", + "description": "GitLab repository owner." + }, + "gitlabPathNamespace": { + "type": "string", + "description": "Full GitLab namespace path." + }, + "gitlabProjectId": { + "type": "integer", + "description": "Numeric GitLab project ID." + }, + "gitlabRepository": { + "type": "string", + "description": "GitLab repository name." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "herokuVersion": { + "type": "string", + "description": "Heroku buildpack stack version." + }, + "isPreviewDeploymentsActive": { + "type": "boolean", + "description": "Build a preview deployment for each pull request." + }, + "isStaticSpa": { + "type": "boolean", + "description": "Serve a static build as a single-page application." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the application." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "owner": { + "type": "string", + "description": "GitHub repository owner." + }, + "password": { + "type": "string", + "description": "Registry password, when pulling a private image.", + "secret": true + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "previewBuildArgs": { + "type": "string", + "description": "Build arguments applied to preview deployments." + }, + "previewBuildSecrets": { + "type": "string", + "description": "Build secrets applied to preview deployments.", + "secret": true + }, + "previewCertificateType": { + "type": "string", + "description": "Certificate strategy for preview deployments. Valid values: \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\" pulumi-lang-hcl=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "previewCustomCertResolver": { + "type": "string", + "description": "Traefik certificate resolver for preview deployments." + }, + "previewEnv": { + "type": "string", + "description": "Environment variables applied to preview deployments." + }, + "previewHttps": { + "type": "boolean", + "description": "Serve preview deployments over HTTPS." + }, + "previewLabels": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Pull request labels that opt into preview deployments." + }, + "previewLimit": { + "type": "integer", + "description": "Maximum number of concurrent preview deployments." + }, + "previewPath": { + "type": "string", + "description": "Base path for preview deployments." + }, + "previewPort": { + "type": "integer", + "description": "Container port exposed by preview deployments." + }, + "previewWildcard": { + "type": "string", + "description": "Wildcard domain used to expose preview deployments." + }, + "publishDirectory": { + "type": "string", + "description": "Directory served when \u003cspan pulumi-lang-nodejs=\"`buildType`\" pulumi-lang-dotnet=\"`BuildType`\" pulumi-lang-go=\"`buildType`\" pulumi-lang-python=\"`build_type`\" pulumi-lang-yaml=\"`buildType`\" pulumi-lang-java=\"`buildType`\" pulumi-lang-hcl=\"`build_type`\"\u003e`buildType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\" pulumi-lang-hcl=\"`static`\"\u003e`static`\u003c/span\u003e." + }, + "railpackVersion": { + "type": "string", + "description": "Railpack version." + }, + "registryId": { + "type": "string", + "description": "Registry used to push the built image." + }, + "registryUrl": { + "type": "string", + "description": "Registry URL, when pulling a private image." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "repository": { + "type": "string", + "description": "GitHub repository name." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackActive": { + "type": "boolean", + "description": "Keep previous images so deployments can be rolled back." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "rollbackRegistryId": { + "type": "string", + "description": "Registry used to store rollback images." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "sourceType": { + "type": "string", + "description": "Where the application's code or image comes from. Valid values: \u003cspan pulumi-lang-nodejs=\"`docker`\" pulumi-lang-dotnet=\"`Docker`\" pulumi-lang-go=\"`docker`\" pulumi-lang-python=\"`docker`\" pulumi-lang-yaml=\"`docker`\" pulumi-lang-java=\"`docker`\" pulumi-lang-hcl=\"`docker`\"\u003e`docker`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`github`\" pulumi-lang-dotnet=\"`Github`\" pulumi-lang-go=\"`github`\" pulumi-lang-python=\"`github`\" pulumi-lang-yaml=\"`github`\" pulumi-lang-java=\"`github`\" pulumi-lang-hcl=\"`github`\"\u003e`github`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitlab`\" pulumi-lang-dotnet=\"`Gitlab`\" pulumi-lang-go=\"`gitlab`\" pulumi-lang-python=\"`gitlab`\" pulumi-lang-yaml=\"`gitlab`\" pulumi-lang-java=\"`gitlab`\" pulumi-lang-hcl=\"`gitlab`\"\u003e`gitlab`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitbucket`\" pulumi-lang-dotnet=\"`Bitbucket`\" pulumi-lang-go=\"`bitbucket`\" pulumi-lang-python=\"`bitbucket`\" pulumi-lang-yaml=\"`bitbucket`\" pulumi-lang-java=\"`bitbucket`\" pulumi-lang-hcl=\"`bitbucket`\"\u003e`bitbucket`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitea`\" pulumi-lang-dotnet=\"`Gitea`\" pulumi-lang-go=\"`gitea`\" pulumi-lang-python=\"`gitea`\" pulumi-lang-yaml=\"`gitea`\" pulumi-lang-java=\"`gitea`\" pulumi-lang-hcl=\"`gitea`\"\u003e`gitea`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`drop`\" pulumi-lang-dotnet=\"`Drop`\" pulumi-lang-go=\"`drop`\" pulumi-lang-python=\"`drop`\" pulumi-lang-yaml=\"`drop`\" pulumi-lang-java=\"`drop`\" pulumi-lang-hcl=\"`drop`\"\u003e`drop`\u003c/span\u003e." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "subtitle": { + "type": "string", + "description": "Display subtitle shown in the Dokploy UI." + }, + "title": { + "type": "string", + "description": "Display title shown in the Dokploy UI." + }, + "triggerType": { + "type": "string", + "description": "What triggers an automatic GitHub deployment. Valid values: \u003cspan pulumi-lang-nodejs=\"`push`\" pulumi-lang-dotnet=\"`Push`\" pulumi-lang-go=\"`push`\" pulumi-lang-python=\"`push`\" pulumi-lang-yaml=\"`push`\" pulumi-lang-java=\"`push`\" pulumi-lang-hcl=\"`push`\"\u003e`push`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tag`\" pulumi-lang-dotnet=\"`Tag`\" pulumi-lang-go=\"`tag`\" pulumi-lang-python=\"`tag`\" pulumi-lang-yaml=\"`tag`\" pulumi-lang-java=\"`tag`\" pulumi-lang-hcl=\"`tag`\"\u003e`tag`\u003c/span\u003e." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + }, + "username": { + "type": "string", + "description": "Registry username, when pulling a private image." + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns that limit which changed paths trigger an automatic deployment." + } + }, + "required": [ + "appName", + "applicationStatus", + "args", + "autoDeploy", + "bitbucketBuildPath", + "buildPath", + "buildSecrets", + "buildType", + "cleanCache", + "createEnvFile", + "createdAt", + "detachDokployNetwork", + "dockerfile", + "enableSubmodules", + "enabled", + "environmentId", + "giteaBuildPath", + "gitlabBuildPath", + "herokuVersion", + "isPreviewDeploymentsActive", + "isStaticSpa", + "name", + "networkIds", + "password", + "previewBuildSecrets", + "previewCertificateType", + "previewHttps", + "previewLabels", + "previewLimit", + "previewPath", + "previewPort", + "railpackVersion", + "replicas", + "rollbackActive", + "sourceType", + "triggerType", + "watchPaths" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "autoDeploy": { + "type": "boolean", + "description": "Deploy automatically when the configured trigger fires." + }, + "bitbucketBranch": { + "type": "string", + "description": "Bitbucket branch to build." + }, + "bitbucketBuildPath": { + "type": "string", + "description": "Path within the Bitbucket repository to build from." + }, + "bitbucketId": { + "type": "string", + "description": "ID of the configured Bitbucket provider connection." + }, + "bitbucketOwner": { + "type": "string", + "description": "Bitbucket repository owner." + }, + "bitbucketRepository": { + "type": "string", + "description": "Bitbucket repository name." + }, + "bitbucketRepositorySlug": { + "type": "string", + "description": "Bitbucket repository slug." + }, + "branch": { + "type": "string", + "description": "GitHub branch to build." + }, + "buildArgs": { + "type": "string", + "description": "Docker build arguments in `KEY=value` format, one per line." + }, + "buildPath": { + "type": "string", + "description": "Path within the GitHub repository to build from." + }, + "buildRegistryId": { + "type": "string", + "description": "Registry used by a dedicated build server." + }, + "buildSecrets": { + "type": "string", + "description": "Docker build secrets in `KEY=value` format, one per line.", + "secret": true + }, + "buildServerId": { + "type": "string", + "description": "Server that performs builds, when separate from the deploy server." + }, + "buildType": { + "type": "string", + "description": "How the application is built. Valid values: \u003cspan pulumi-lang-nodejs=\"`dockerfile`\" pulumi-lang-dotnet=\"`Dockerfile`\" pulumi-lang-go=\"`dockerfile`\" pulumi-lang-python=\"`dockerfile`\" pulumi-lang-yaml=\"`dockerfile`\" pulumi-lang-java=\"`dockerfile`\" pulumi-lang-hcl=\"`dockerfile`\"\u003e`dockerfile`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`herokuBuildpacks`\" pulumi-lang-dotnet=\"`HerokuBuildpacks`\" pulumi-lang-go=\"`herokuBuildpacks`\" pulumi-lang-python=\"`heroku_buildpacks`\" pulumi-lang-yaml=\"`herokuBuildpacks`\" pulumi-lang-java=\"`herokuBuildpacks`\" pulumi-lang-hcl=\"`heroku_buildpacks`\"\u003e`herokuBuildpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`paketoBuildpacks`\" pulumi-lang-dotnet=\"`PaketoBuildpacks`\" pulumi-lang-go=\"`paketoBuildpacks`\" pulumi-lang-python=\"`paketo_buildpacks`\" pulumi-lang-yaml=\"`paketoBuildpacks`\" pulumi-lang-java=\"`paketoBuildpacks`\" pulumi-lang-hcl=\"`paketo_buildpacks`\"\u003e`paketoBuildpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nixpacks`\" pulumi-lang-dotnet=\"`Nixpacks`\" pulumi-lang-go=\"`nixpacks`\" pulumi-lang-python=\"`nixpacks`\" pulumi-lang-yaml=\"`nixpacks`\" pulumi-lang-java=\"`nixpacks`\" pulumi-lang-hcl=\"`nixpacks`\"\u003e`nixpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\" pulumi-lang-hcl=\"`static`\"\u003e`static`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`railpack`\" pulumi-lang-dotnet=\"`Railpack`\" pulumi-lang-go=\"`railpack`\" pulumi-lang-python=\"`railpack`\" pulumi-lang-yaml=\"`railpack`\" pulumi-lang-java=\"`railpack`\" pulumi-lang-hcl=\"`railpack`\"\u003e`railpack`\u003c/span\u003e." + }, + "cleanCache": { + "type": "boolean", + "description": "Discard the build cache on the next deployment." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createEnvFile": { + "type": "boolean", + "description": "Write the environment variables to a `.env` file in the container." + }, + "customGitBranch": { + "type": "string", + "description": "Branch to build for a custom Git remote." + }, + "customGitBuildPath": { + "type": "string", + "description": "Path within a custom Git repository to build from." + }, + "customGitSshKeyId": { + "type": "string", + "description": "SSH key used to clone a private custom Git remote." + }, + "customGitUrl": { + "type": "string", + "description": "Git remote URL, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerBuildStage": { + "type": "string", + "description": "Target stage for a multi-stage Docker build." + }, + "dockerContextPath": { + "type": "string", + "description": "Docker build context path." + }, + "dockerImage": { + "type": "string", + "description": "Docker image reference, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`docker`\" pulumi-lang-dotnet=\"`Docker`\" pulumi-lang-go=\"`docker`\" pulumi-lang-python=\"`docker`\" pulumi-lang-yaml=\"`docker`\" pulumi-lang-java=\"`docker`\" pulumi-lang-hcl=\"`docker`\"\u003e`docker`\u003c/span\u003e." + }, + "dockerfile": { + "type": "string", + "description": "Path to the Dockerfile, when \u003cspan pulumi-lang-nodejs=\"`buildType`\" pulumi-lang-dotnet=\"`BuildType`\" pulumi-lang-go=\"`buildType`\" pulumi-lang-python=\"`build_type`\" pulumi-lang-yaml=\"`buildType`\" pulumi-lang-java=\"`buildType`\" pulumi-lang-hcl=\"`build_type`\"\u003e`buildType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`dockerfile`\" pulumi-lang-dotnet=\"`Dockerfile`\" pulumi-lang-go=\"`dockerfile`\" pulumi-lang-python=\"`dockerfile`\" pulumi-lang-yaml=\"`dockerfile`\" pulumi-lang-java=\"`dockerfile`\" pulumi-lang-hcl=\"`dockerfile`\"\u003e`dockerfile`\u003c/span\u003e." + }, + "enableSubmodules": { + "type": "boolean", + "description": "Clone Git submodules when checking out the repository." + }, + "enabled": { + "type": "boolean", + "description": "Whether the application is enabled." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Runtime environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this application belongs to." + }, + "giteaBranch": { + "type": "string", + "description": "Gitea branch to build." + }, + "giteaBuildPath": { + "type": "string", + "description": "Path within the Gitea repository to build from." + }, + "giteaId": { + "type": "string", + "description": "ID of the configured Gitea provider connection." + }, + "giteaOwner": { + "type": "string", + "description": "Gitea repository owner." + }, + "giteaRepository": { + "type": "string", + "description": "Gitea repository name." + }, + "githubId": { + "type": "string", + "description": "ID of the configured GitHub provider connection." + }, + "gitlabBranch": { + "type": "string", + "description": "GitLab branch to build." + }, + "gitlabBuildPath": { + "type": "string", + "description": "Path within the GitLab repository to build from." + }, + "gitlabId": { + "type": "string", + "description": "ID of the configured GitLab provider connection." + }, + "gitlabOwner": { + "type": "string", + "description": "GitLab repository owner." + }, + "gitlabPathNamespace": { + "type": "string", + "description": "Full GitLab namespace path." + }, + "gitlabProjectId": { + "type": "integer", + "description": "Numeric GitLab project ID." + }, + "gitlabRepository": { + "type": "string", + "description": "GitLab repository name." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "herokuVersion": { + "type": "string", + "description": "Heroku buildpack stack version." + }, + "isPreviewDeploymentsActive": { + "type": "boolean", + "description": "Build a preview deployment for each pull request." + }, + "isStaticSpa": { + "type": "boolean", + "description": "Serve a static build as a single-page application." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the application." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "owner": { + "type": "string", + "description": "GitHub repository owner." + }, + "password": { + "type": "string", + "description": "Registry password, when pulling a private image.", + "secret": true + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "previewBuildArgs": { + "type": "string", + "description": "Build arguments applied to preview deployments." + }, + "previewBuildSecrets": { + "type": "string", + "description": "Build secrets applied to preview deployments.", + "secret": true + }, + "previewCertificateType": { + "type": "string", + "description": "Certificate strategy for preview deployments. Valid values: \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\" pulumi-lang-hcl=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "previewCustomCertResolver": { + "type": "string", + "description": "Traefik certificate resolver for preview deployments." + }, + "previewEnv": { + "type": "string", + "description": "Environment variables applied to preview deployments." + }, + "previewHttps": { + "type": "boolean", + "description": "Serve preview deployments over HTTPS." + }, + "previewLabels": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Pull request labels that opt into preview deployments." + }, + "previewLimit": { + "type": "integer", + "description": "Maximum number of concurrent preview deployments." + }, + "previewPath": { + "type": "string", + "description": "Base path for preview deployments." + }, + "previewPort": { + "type": "integer", + "description": "Container port exposed by preview deployments." + }, + "previewWildcard": { + "type": "string", + "description": "Wildcard domain used to expose preview deployments." + }, + "publishDirectory": { + "type": "string", + "description": "Directory served when \u003cspan pulumi-lang-nodejs=\"`buildType`\" pulumi-lang-dotnet=\"`BuildType`\" pulumi-lang-go=\"`buildType`\" pulumi-lang-python=\"`build_type`\" pulumi-lang-yaml=\"`buildType`\" pulumi-lang-java=\"`buildType`\" pulumi-lang-hcl=\"`build_type`\"\u003e`buildType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\" pulumi-lang-hcl=\"`static`\"\u003e`static`\u003c/span\u003e." + }, + "railpackVersion": { + "type": "string", + "description": "Railpack version." + }, + "registryId": { + "type": "string", + "description": "Registry used to push the built image." + }, + "registryUrl": { + "type": "string", + "description": "Registry URL, when pulling a private image." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "repository": { + "type": "string", + "description": "GitHub repository name." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackActive": { + "type": "boolean", + "description": "Keep previous images so deployments can be rolled back." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "rollbackRegistryId": { + "type": "string", + "description": "Registry used to store rollback images." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "sourceType": { + "type": "string", + "description": "Where the application's code or image comes from. Valid values: \u003cspan pulumi-lang-nodejs=\"`docker`\" pulumi-lang-dotnet=\"`Docker`\" pulumi-lang-go=\"`docker`\" pulumi-lang-python=\"`docker`\" pulumi-lang-yaml=\"`docker`\" pulumi-lang-java=\"`docker`\" pulumi-lang-hcl=\"`docker`\"\u003e`docker`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`github`\" pulumi-lang-dotnet=\"`Github`\" pulumi-lang-go=\"`github`\" pulumi-lang-python=\"`github`\" pulumi-lang-yaml=\"`github`\" pulumi-lang-java=\"`github`\" pulumi-lang-hcl=\"`github`\"\u003e`github`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitlab`\" pulumi-lang-dotnet=\"`Gitlab`\" pulumi-lang-go=\"`gitlab`\" pulumi-lang-python=\"`gitlab`\" pulumi-lang-yaml=\"`gitlab`\" pulumi-lang-java=\"`gitlab`\" pulumi-lang-hcl=\"`gitlab`\"\u003e`gitlab`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitbucket`\" pulumi-lang-dotnet=\"`Bitbucket`\" pulumi-lang-go=\"`bitbucket`\" pulumi-lang-python=\"`bitbucket`\" pulumi-lang-yaml=\"`bitbucket`\" pulumi-lang-java=\"`bitbucket`\" pulumi-lang-hcl=\"`bitbucket`\"\u003e`bitbucket`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitea`\" pulumi-lang-dotnet=\"`Gitea`\" pulumi-lang-go=\"`gitea`\" pulumi-lang-python=\"`gitea`\" pulumi-lang-yaml=\"`gitea`\" pulumi-lang-java=\"`gitea`\" pulumi-lang-hcl=\"`gitea`\"\u003e`gitea`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`drop`\" pulumi-lang-dotnet=\"`Drop`\" pulumi-lang-go=\"`drop`\" pulumi-lang-python=\"`drop`\" pulumi-lang-yaml=\"`drop`\" pulumi-lang-java=\"`drop`\" pulumi-lang-hcl=\"`drop`\"\u003e`drop`\u003c/span\u003e." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "subtitle": { + "type": "string", + "description": "Display subtitle shown in the Dokploy UI." + }, + "title": { + "type": "string", + "description": "Display title shown in the Dokploy UI." + }, + "triggerType": { + "type": "string", + "description": "What triggers an automatic GitHub deployment. Valid values: \u003cspan pulumi-lang-nodejs=\"`push`\" pulumi-lang-dotnet=\"`Push`\" pulumi-lang-go=\"`push`\" pulumi-lang-python=\"`push`\" pulumi-lang-yaml=\"`push`\" pulumi-lang-java=\"`push`\" pulumi-lang-hcl=\"`push`\"\u003e`push`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tag`\" pulumi-lang-dotnet=\"`Tag`\" pulumi-lang-go=\"`tag`\" pulumi-lang-python=\"`tag`\" pulumi-lang-yaml=\"`tag`\" pulumi-lang-java=\"`tag`\" pulumi-lang-hcl=\"`tag`\"\u003e`tag`\u003c/span\u003e." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + }, + "username": { + "type": "string", + "description": "Registry username, when pulling a private image." + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns that limit which changed paths trigger an automatic deployment." + } + }, + "requiredInputs": [ + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Application resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "autoDeploy": { + "type": "boolean", + "description": "Deploy automatically when the configured trigger fires." + }, + "bitbucketBranch": { + "type": "string", + "description": "Bitbucket branch to build." + }, + "bitbucketBuildPath": { + "type": "string", + "description": "Path within the Bitbucket repository to build from." + }, + "bitbucketId": { + "type": "string", + "description": "ID of the configured Bitbucket provider connection." + }, + "bitbucketOwner": { + "type": "string", + "description": "Bitbucket repository owner." + }, + "bitbucketRepository": { + "type": "string", + "description": "Bitbucket repository name." + }, + "bitbucketRepositorySlug": { + "type": "string", + "description": "Bitbucket repository slug." + }, + "branch": { + "type": "string", + "description": "GitHub branch to build." + }, + "buildArgs": { + "type": "string", + "description": "Docker build arguments in `KEY=value` format, one per line." + }, + "buildPath": { + "type": "string", + "description": "Path within the GitHub repository to build from." + }, + "buildRegistryId": { + "type": "string", + "description": "Registry used by a dedicated build server." + }, + "buildSecrets": { + "type": "string", + "description": "Docker build secrets in `KEY=value` format, one per line.", + "secret": true + }, + "buildServerId": { + "type": "string", + "description": "Server that performs builds, when separate from the deploy server." + }, + "buildType": { + "type": "string", + "description": "How the application is built. Valid values: \u003cspan pulumi-lang-nodejs=\"`dockerfile`\" pulumi-lang-dotnet=\"`Dockerfile`\" pulumi-lang-go=\"`dockerfile`\" pulumi-lang-python=\"`dockerfile`\" pulumi-lang-yaml=\"`dockerfile`\" pulumi-lang-java=\"`dockerfile`\" pulumi-lang-hcl=\"`dockerfile`\"\u003e`dockerfile`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`herokuBuildpacks`\" pulumi-lang-dotnet=\"`HerokuBuildpacks`\" pulumi-lang-go=\"`herokuBuildpacks`\" pulumi-lang-python=\"`heroku_buildpacks`\" pulumi-lang-yaml=\"`herokuBuildpacks`\" pulumi-lang-java=\"`herokuBuildpacks`\" pulumi-lang-hcl=\"`heroku_buildpacks`\"\u003e`herokuBuildpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`paketoBuildpacks`\" pulumi-lang-dotnet=\"`PaketoBuildpacks`\" pulumi-lang-go=\"`paketoBuildpacks`\" pulumi-lang-python=\"`paketo_buildpacks`\" pulumi-lang-yaml=\"`paketoBuildpacks`\" pulumi-lang-java=\"`paketoBuildpacks`\" pulumi-lang-hcl=\"`paketo_buildpacks`\"\u003e`paketoBuildpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nixpacks`\" pulumi-lang-dotnet=\"`Nixpacks`\" pulumi-lang-go=\"`nixpacks`\" pulumi-lang-python=\"`nixpacks`\" pulumi-lang-yaml=\"`nixpacks`\" pulumi-lang-java=\"`nixpacks`\" pulumi-lang-hcl=\"`nixpacks`\"\u003e`nixpacks`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\" pulumi-lang-hcl=\"`static`\"\u003e`static`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`railpack`\" pulumi-lang-dotnet=\"`Railpack`\" pulumi-lang-go=\"`railpack`\" pulumi-lang-python=\"`railpack`\" pulumi-lang-yaml=\"`railpack`\" pulumi-lang-java=\"`railpack`\" pulumi-lang-hcl=\"`railpack`\"\u003e`railpack`\u003c/span\u003e." + }, + "cleanCache": { + "type": "boolean", + "description": "Discard the build cache on the next deployment." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createEnvFile": { + "type": "boolean", + "description": "Write the environment variables to a `.env` file in the container." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the application was created." + }, + "customGitBranch": { + "type": "string", + "description": "Branch to build for a custom Git remote." + }, + "customGitBuildPath": { + "type": "string", + "description": "Path within a custom Git repository to build from." + }, + "customGitSshKeyId": { + "type": "string", + "description": "SSH key used to clone a private custom Git remote." + }, + "customGitUrl": { + "type": "string", + "description": "Git remote URL, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerBuildStage": { + "type": "string", + "description": "Target stage for a multi-stage Docker build." + }, + "dockerContextPath": { + "type": "string", + "description": "Docker build context path." + }, + "dockerImage": { + "type": "string", + "description": "Docker image reference, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`docker`\" pulumi-lang-dotnet=\"`Docker`\" pulumi-lang-go=\"`docker`\" pulumi-lang-python=\"`docker`\" pulumi-lang-yaml=\"`docker`\" pulumi-lang-java=\"`docker`\" pulumi-lang-hcl=\"`docker`\"\u003e`docker`\u003c/span\u003e." + }, + "dockerfile": { + "type": "string", + "description": "Path to the Dockerfile, when \u003cspan pulumi-lang-nodejs=\"`buildType`\" pulumi-lang-dotnet=\"`BuildType`\" pulumi-lang-go=\"`buildType`\" pulumi-lang-python=\"`build_type`\" pulumi-lang-yaml=\"`buildType`\" pulumi-lang-java=\"`buildType`\" pulumi-lang-hcl=\"`build_type`\"\u003e`buildType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`dockerfile`\" pulumi-lang-dotnet=\"`Dockerfile`\" pulumi-lang-go=\"`dockerfile`\" pulumi-lang-python=\"`dockerfile`\" pulumi-lang-yaml=\"`dockerfile`\" pulumi-lang-java=\"`dockerfile`\" pulumi-lang-hcl=\"`dockerfile`\"\u003e`dockerfile`\u003c/span\u003e." + }, + "enableSubmodules": { + "type": "boolean", + "description": "Clone Git submodules when checking out the repository." + }, + "enabled": { + "type": "boolean", + "description": "Whether the application is enabled." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Runtime environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this application belongs to." + }, + "giteaBranch": { + "type": "string", + "description": "Gitea branch to build." + }, + "giteaBuildPath": { + "type": "string", + "description": "Path within the Gitea repository to build from." + }, + "giteaId": { + "type": "string", + "description": "ID of the configured Gitea provider connection." + }, + "giteaOwner": { + "type": "string", + "description": "Gitea repository owner." + }, + "giteaRepository": { + "type": "string", + "description": "Gitea repository name." + }, + "githubId": { + "type": "string", + "description": "ID of the configured GitHub provider connection." + }, + "gitlabBranch": { + "type": "string", + "description": "GitLab branch to build." + }, + "gitlabBuildPath": { + "type": "string", + "description": "Path within the GitLab repository to build from." + }, + "gitlabId": { + "type": "string", + "description": "ID of the configured GitLab provider connection." + }, + "gitlabOwner": { + "type": "string", + "description": "GitLab repository owner." + }, + "gitlabPathNamespace": { + "type": "string", + "description": "Full GitLab namespace path." + }, + "gitlabProjectId": { + "type": "integer", + "description": "Numeric GitLab project ID." + }, + "gitlabRepository": { + "type": "string", + "description": "GitLab repository name." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "herokuVersion": { + "type": "string", + "description": "Heroku buildpack stack version." + }, + "isPreviewDeploymentsActive": { + "type": "boolean", + "description": "Build a preview deployment for each pull request." + }, + "isStaticSpa": { + "type": "boolean", + "description": "Serve a static build as a single-page application." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the application." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "owner": { + "type": "string", + "description": "GitHub repository owner." + }, + "password": { + "type": "string", + "description": "Registry password, when pulling a private image.", + "secret": true + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "previewBuildArgs": { + "type": "string", + "description": "Build arguments applied to preview deployments." + }, + "previewBuildSecrets": { + "type": "string", + "description": "Build secrets applied to preview deployments.", + "secret": true + }, + "previewCertificateType": { + "type": "string", + "description": "Certificate strategy for preview deployments. Valid values: \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\" pulumi-lang-hcl=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "previewCustomCertResolver": { + "type": "string", + "description": "Traefik certificate resolver for preview deployments." + }, + "previewEnv": { + "type": "string", + "description": "Environment variables applied to preview deployments." + }, + "previewHttps": { + "type": "boolean", + "description": "Serve preview deployments over HTTPS." + }, + "previewLabels": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Pull request labels that opt into preview deployments." + }, + "previewLimit": { + "type": "integer", + "description": "Maximum number of concurrent preview deployments." + }, + "previewPath": { + "type": "string", + "description": "Base path for preview deployments." + }, + "previewPort": { + "type": "integer", + "description": "Container port exposed by preview deployments." + }, + "previewWildcard": { + "type": "string", + "description": "Wildcard domain used to expose preview deployments." + }, + "publishDirectory": { + "type": "string", + "description": "Directory served when \u003cspan pulumi-lang-nodejs=\"`buildType`\" pulumi-lang-dotnet=\"`BuildType`\" pulumi-lang-go=\"`buildType`\" pulumi-lang-python=\"`build_type`\" pulumi-lang-yaml=\"`buildType`\" pulumi-lang-java=\"`buildType`\" pulumi-lang-hcl=\"`build_type`\"\u003e`buildType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\" pulumi-lang-hcl=\"`static`\"\u003e`static`\u003c/span\u003e." + }, + "railpackVersion": { + "type": "string", + "description": "Railpack version." + }, + "registryId": { + "type": "string", + "description": "Registry used to push the built image." + }, + "registryUrl": { + "type": "string", + "description": "Registry URL, when pulling a private image." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "repository": { + "type": "string", + "description": "GitHub repository name." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackActive": { + "type": "boolean", + "description": "Keep previous images so deployments can be rolled back." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "rollbackRegistryId": { + "type": "string", + "description": "Registry used to store rollback images." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "sourceType": { + "type": "string", + "description": "Where the application's code or image comes from. Valid values: \u003cspan pulumi-lang-nodejs=\"`docker`\" pulumi-lang-dotnet=\"`Docker`\" pulumi-lang-go=\"`docker`\" pulumi-lang-python=\"`docker`\" pulumi-lang-yaml=\"`docker`\" pulumi-lang-java=\"`docker`\" pulumi-lang-hcl=\"`docker`\"\u003e`docker`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`github`\" pulumi-lang-dotnet=\"`Github`\" pulumi-lang-go=\"`github`\" pulumi-lang-python=\"`github`\" pulumi-lang-yaml=\"`github`\" pulumi-lang-java=\"`github`\" pulumi-lang-hcl=\"`github`\"\u003e`github`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitlab`\" pulumi-lang-dotnet=\"`Gitlab`\" pulumi-lang-go=\"`gitlab`\" pulumi-lang-python=\"`gitlab`\" pulumi-lang-yaml=\"`gitlab`\" pulumi-lang-java=\"`gitlab`\" pulumi-lang-hcl=\"`gitlab`\"\u003e`gitlab`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitbucket`\" pulumi-lang-dotnet=\"`Bitbucket`\" pulumi-lang-go=\"`bitbucket`\" pulumi-lang-python=\"`bitbucket`\" pulumi-lang-yaml=\"`bitbucket`\" pulumi-lang-java=\"`bitbucket`\" pulumi-lang-hcl=\"`bitbucket`\"\u003e`bitbucket`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitea`\" pulumi-lang-dotnet=\"`Gitea`\" pulumi-lang-go=\"`gitea`\" pulumi-lang-python=\"`gitea`\" pulumi-lang-yaml=\"`gitea`\" pulumi-lang-java=\"`gitea`\" pulumi-lang-hcl=\"`gitea`\"\u003e`gitea`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`drop`\" pulumi-lang-dotnet=\"`Drop`\" pulumi-lang-go=\"`drop`\" pulumi-lang-python=\"`drop`\" pulumi-lang-yaml=\"`drop`\" pulumi-lang-java=\"`drop`\" pulumi-lang-hcl=\"`drop`\"\u003e`drop`\u003c/span\u003e." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "subtitle": { + "type": "string", + "description": "Display subtitle shown in the Dokploy UI." + }, + "title": { + "type": "string", + "description": "Display title shown in the Dokploy UI." + }, + "triggerType": { + "type": "string", + "description": "What triggers an automatic GitHub deployment. Valid values: \u003cspan pulumi-lang-nodejs=\"`push`\" pulumi-lang-dotnet=\"`Push`\" pulumi-lang-go=\"`push`\" pulumi-lang-python=\"`push`\" pulumi-lang-yaml=\"`push`\" pulumi-lang-java=\"`push`\" pulumi-lang-hcl=\"`push`\"\u003e`push`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tag`\" pulumi-lang-dotnet=\"`Tag`\" pulumi-lang-go=\"`tag`\" pulumi-lang-python=\"`tag`\" pulumi-lang-yaml=\"`tag`\" pulumi-lang-java=\"`tag`\" pulumi-lang-hcl=\"`tag`\"\u003e`tag`\u003c/span\u003e." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + }, + "username": { + "type": "string", + "description": "Registry username, when pulling a private image." + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns that limit which changed paths trigger an automatic deployment." + } + }, + "type": "object" + } + }, + "dokploy:index/certificate:Certificate": { + "properties": { + "autoRenew": { + "type": "boolean", + "description": "Whether Dokploy should renew this certificate automatically." + }, + "certificateData": { + "type": "string", + "description": "PEM-encoded certificate chain." + }, + "certificatePath": { + "type": "string", + "description": "Path where Dokploy writes the certificate on disk." + }, + "name": { + "type": "string", + "description": "Display name of the certificate." + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded private key.", + "secret": true + }, + "serverId": { + "type": "string", + "description": "Server this certificate is installed on." + } + }, + "required": [ + "autoRenew", + "certificateData", + "certificatePath", + "name", + "privateKey" + ], + "inputProperties": { + "autoRenew": { + "type": "boolean", + "description": "Whether Dokploy should renew this certificate automatically." + }, + "certificateData": { + "type": "string", + "description": "PEM-encoded certificate chain." + }, + "name": { + "type": "string", + "description": "Display name of the certificate." + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded private key.", + "secret": true + }, + "serverId": { + "type": "string", + "description": "Server this certificate is installed on." + } + }, + "requiredInputs": [ + "certificateData", + "privateKey" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Certificate resources.\n", + "properties": { + "autoRenew": { + "type": "boolean", + "description": "Whether Dokploy should renew this certificate automatically." + }, + "certificateData": { + "type": "string", + "description": "PEM-encoded certificate chain." + }, + "certificatePath": { + "type": "string", + "description": "Path where Dokploy writes the certificate on disk." + }, + "name": { + "type": "string", + "description": "Display name of the certificate." + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded private key.", + "secret": true + }, + "serverId": { + "type": "string", + "description": "Server this certificate is installed on." + } + }, + "type": "object" + } + }, + "dokploy:index/compose:Compose": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack." + }, + "autoDeploy": { + "type": "boolean", + "description": "Deploy automatically when the configured trigger fires." + }, + "bitbucketBranch": { + "type": "string", + "description": "Bitbucket branch to deploy." + }, + "bitbucketId": { + "type": "string", + "description": "ID of the configured Bitbucket provider connection." + }, + "bitbucketOwner": { + "type": "string", + "description": "Bitbucket repository owner." + }, + "bitbucketRepository": { + "type": "string", + "description": "Bitbucket repository name." + }, + "bitbucketRepositorySlug": { + "type": "string", + "description": "Bitbucket repository slug." + }, + "branch": { + "type": "string", + "description": "GitHub branch to deploy." + }, + "command": { + "type": "string", + "description": "Custom `docker compose` command to run." + }, + "composeFile": { + "type": "string", + "description": "Inline Compose file contents. Used when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\" pulumi-lang-hcl=\"`raw`\"\u003e`raw`\u003c/span\u003e." + }, + "composePath": { + "type": "string", + "description": "Path to the Compose file within the repository." + }, + "composeStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "composeType": { + "type": "string", + "description": "Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, \u003cspan pulumi-lang-nodejs=\"`stack`\" pulumi-lang-dotnet=\"`Stack`\" pulumi-lang-go=\"`stack`\" pulumi-lang-python=\"`stack`\" pulumi-lang-yaml=\"`stack`\" pulumi-lang-java=\"`stack`\" pulumi-lang-hcl=\"`stack`\"\u003e`stack`\u003c/span\u003e." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the stack was created." + }, + "customGitBranch": { + "type": "string", + "description": "Branch to deploy for a custom Git remote." + }, + "customGitSshKeyId": { + "type": "string", + "description": "SSH key used to clone a private custom Git remote." + }, + "customGitUrl": { + "type": "string", + "description": "Git remote URL, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e." + }, + "deleteVolumes": { + "type": "boolean", + "description": "Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\" pulumi-lang-hcl=\"`false`\"\u003e`false`\u003c/span\u003e, which preserves the data." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "enableSubmodules": { + "type": "boolean", + "description": "Clone Git submodules when checking out the repository." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this stack belongs to." + }, + "giteaBranch": { + "type": "string", + "description": "Gitea branch to deploy." + }, + "giteaId": { + "type": "string", + "description": "ID of the configured Gitea provider connection." + }, + "giteaOwner": { + "type": "string", + "description": "Gitea repository owner." + }, + "giteaRepository": { + "type": "string", + "description": "Gitea repository name." + }, + "githubId": { + "type": "string", + "description": "ID of the configured GitHub provider connection." + }, + "gitlabBranch": { + "type": "string", + "description": "GitLab branch to deploy." + }, + "gitlabId": { + "type": "string", + "description": "ID of the configured GitLab provider connection." + }, + "gitlabOwner": { + "type": "string", + "description": "GitLab repository owner." + }, + "gitlabPathNamespace": { + "type": "string", + "description": "Full GitLab namespace path." + }, + "gitlabProjectId": { + "type": "integer", + "description": "Numeric GitLab project ID." + }, + "gitlabRepository": { + "type": "string", + "description": "GitLab repository name." + }, + "isolatedDeployment": { + "type": "boolean", + "description": "Run the stack on its own isolated Docker network." + }, + "isolatedDeploymentsVolume": { + "type": "boolean", + "description": "Prefix volume names for isolated deployments. Retained for backwards compatibility." + }, + "name": { + "type": "string", + "description": "Display name of the stack." + }, + "owner": { + "type": "string", + "description": "GitHub repository owner." + }, + "randomize": { + "type": "boolean", + "description": "Append a random suffix to service and volume names." + }, + "repository": { + "type": "string", + "description": "GitHub repository name." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "sourceType": { + "type": "string", + "description": "Where the Compose file comes from. Valid values: \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`github`\" pulumi-lang-dotnet=\"`Github`\" pulumi-lang-go=\"`github`\" pulumi-lang-python=\"`github`\" pulumi-lang-yaml=\"`github`\" pulumi-lang-java=\"`github`\" pulumi-lang-hcl=\"`github`\"\u003e`github`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitlab`\" pulumi-lang-dotnet=\"`Gitlab`\" pulumi-lang-go=\"`gitlab`\" pulumi-lang-python=\"`gitlab`\" pulumi-lang-yaml=\"`gitlab`\" pulumi-lang-java=\"`gitlab`\" pulumi-lang-hcl=\"`gitlab`\"\u003e`gitlab`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitbucket`\" pulumi-lang-dotnet=\"`Bitbucket`\" pulumi-lang-go=\"`bitbucket`\" pulumi-lang-python=\"`bitbucket`\" pulumi-lang-yaml=\"`bitbucket`\" pulumi-lang-java=\"`bitbucket`\" pulumi-lang-hcl=\"`bitbucket`\"\u003e`bitbucket`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitea`\" pulumi-lang-dotnet=\"`Gitea`\" pulumi-lang-go=\"`gitea`\" pulumi-lang-python=\"`gitea`\" pulumi-lang-yaml=\"`gitea`\" pulumi-lang-java=\"`gitea`\" pulumi-lang-hcl=\"`gitea`\"\u003e`gitea`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\" pulumi-lang-hcl=\"`raw`\"\u003e`raw`\u003c/span\u003e." + }, + "suffix": { + "type": "string", + "description": "Suffix appended to generated resource names." + }, + "triggerType": { + "type": "string", + "description": "What triggers an automatic deployment. Valid values: \u003cspan pulumi-lang-nodejs=\"`push`\" pulumi-lang-dotnet=\"`Push`\" pulumi-lang-go=\"`push`\" pulumi-lang-python=\"`push`\" pulumi-lang-yaml=\"`push`\" pulumi-lang-java=\"`push`\" pulumi-lang-hcl=\"`push`\"\u003e`push`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tag`\" pulumi-lang-dotnet=\"`Tag`\" pulumi-lang-go=\"`tag`\" pulumi-lang-python=\"`tag`\" pulumi-lang-yaml=\"`tag`\" pulumi-lang-java=\"`tag`\" pulumi-lang-hcl=\"`tag`\"\u003e`tag`\u003c/span\u003e." + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns that limit which changed paths trigger an automatic deployment." + } + }, + "required": [ + "appName", + "autoDeploy", + "command", + "composeFile", + "composePath", + "composeStatus", + "composeType", + "createdAt", + "enableSubmodules", + "environmentId", + "isolatedDeployment", + "isolatedDeploymentsVolume", + "name", + "randomize", + "sourceType", + "suffix", + "triggerType", + "watchPaths" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack." + }, + "autoDeploy": { + "type": "boolean", + "description": "Deploy automatically when the configured trigger fires." + }, + "bitbucketBranch": { + "type": "string", + "description": "Bitbucket branch to deploy." + }, + "bitbucketId": { + "type": "string", + "description": "ID of the configured Bitbucket provider connection." + }, + "bitbucketOwner": { + "type": "string", + "description": "Bitbucket repository owner." + }, + "bitbucketRepository": { + "type": "string", + "description": "Bitbucket repository name." + }, + "bitbucketRepositorySlug": { + "type": "string", + "description": "Bitbucket repository slug." + }, + "branch": { + "type": "string", + "description": "GitHub branch to deploy." + }, + "command": { + "type": "string", + "description": "Custom `docker compose` command to run." + }, + "composeFile": { + "type": "string", + "description": "Inline Compose file contents. Used when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\" pulumi-lang-hcl=\"`raw`\"\u003e`raw`\u003c/span\u003e." + }, + "composePath": { + "type": "string", + "description": "Path to the Compose file within the repository." + }, + "composeType": { + "type": "string", + "description": "Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, \u003cspan pulumi-lang-nodejs=\"`stack`\" pulumi-lang-dotnet=\"`Stack`\" pulumi-lang-go=\"`stack`\" pulumi-lang-python=\"`stack`\" pulumi-lang-yaml=\"`stack`\" pulumi-lang-java=\"`stack`\" pulumi-lang-hcl=\"`stack`\"\u003e`stack`\u003c/span\u003e." + }, + "customGitBranch": { + "type": "string", + "description": "Branch to deploy for a custom Git remote." + }, + "customGitSshKeyId": { + "type": "string", + "description": "SSH key used to clone a private custom Git remote." + }, + "customGitUrl": { + "type": "string", + "description": "Git remote URL, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e." + }, + "deleteVolumes": { + "type": "boolean", + "description": "Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\" pulumi-lang-hcl=\"`false`\"\u003e`false`\u003c/span\u003e, which preserves the data." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "enableSubmodules": { + "type": "boolean", + "description": "Clone Git submodules when checking out the repository." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this stack belongs to." + }, + "giteaBranch": { + "type": "string", + "description": "Gitea branch to deploy." + }, + "giteaId": { + "type": "string", + "description": "ID of the configured Gitea provider connection." + }, + "giteaOwner": { + "type": "string", + "description": "Gitea repository owner." + }, + "giteaRepository": { + "type": "string", + "description": "Gitea repository name." + }, + "githubId": { + "type": "string", + "description": "ID of the configured GitHub provider connection." + }, + "gitlabBranch": { + "type": "string", + "description": "GitLab branch to deploy." + }, + "gitlabId": { + "type": "string", + "description": "ID of the configured GitLab provider connection." + }, + "gitlabOwner": { + "type": "string", + "description": "GitLab repository owner." + }, + "gitlabPathNamespace": { + "type": "string", + "description": "Full GitLab namespace path." + }, + "gitlabProjectId": { + "type": "integer", + "description": "Numeric GitLab project ID." + }, + "gitlabRepository": { + "type": "string", + "description": "GitLab repository name." + }, + "isolatedDeployment": { + "type": "boolean", + "description": "Run the stack on its own isolated Docker network." + }, + "isolatedDeploymentsVolume": { + "type": "boolean", + "description": "Prefix volume names for isolated deployments. Retained for backwards compatibility." + }, + "name": { + "type": "string", + "description": "Display name of the stack." + }, + "owner": { + "type": "string", + "description": "GitHub repository owner." + }, + "randomize": { + "type": "boolean", + "description": "Append a random suffix to service and volume names." + }, + "repository": { + "type": "string", + "description": "GitHub repository name." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "sourceType": { + "type": "string", + "description": "Where the Compose file comes from. Valid values: \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`github`\" pulumi-lang-dotnet=\"`Github`\" pulumi-lang-go=\"`github`\" pulumi-lang-python=\"`github`\" pulumi-lang-yaml=\"`github`\" pulumi-lang-java=\"`github`\" pulumi-lang-hcl=\"`github`\"\u003e`github`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitlab`\" pulumi-lang-dotnet=\"`Gitlab`\" pulumi-lang-go=\"`gitlab`\" pulumi-lang-python=\"`gitlab`\" pulumi-lang-yaml=\"`gitlab`\" pulumi-lang-java=\"`gitlab`\" pulumi-lang-hcl=\"`gitlab`\"\u003e`gitlab`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitbucket`\" pulumi-lang-dotnet=\"`Bitbucket`\" pulumi-lang-go=\"`bitbucket`\" pulumi-lang-python=\"`bitbucket`\" pulumi-lang-yaml=\"`bitbucket`\" pulumi-lang-java=\"`bitbucket`\" pulumi-lang-hcl=\"`bitbucket`\"\u003e`bitbucket`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitea`\" pulumi-lang-dotnet=\"`Gitea`\" pulumi-lang-go=\"`gitea`\" pulumi-lang-python=\"`gitea`\" pulumi-lang-yaml=\"`gitea`\" pulumi-lang-java=\"`gitea`\" pulumi-lang-hcl=\"`gitea`\"\u003e`gitea`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\" pulumi-lang-hcl=\"`raw`\"\u003e`raw`\u003c/span\u003e." + }, + "suffix": { + "type": "string", + "description": "Suffix appended to generated resource names." + }, + "triggerType": { + "type": "string", + "description": "What triggers an automatic deployment. Valid values: \u003cspan pulumi-lang-nodejs=\"`push`\" pulumi-lang-dotnet=\"`Push`\" pulumi-lang-go=\"`push`\" pulumi-lang-python=\"`push`\" pulumi-lang-yaml=\"`push`\" pulumi-lang-java=\"`push`\" pulumi-lang-hcl=\"`push`\"\u003e`push`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tag`\" pulumi-lang-dotnet=\"`Tag`\" pulumi-lang-go=\"`tag`\" pulumi-lang-python=\"`tag`\" pulumi-lang-yaml=\"`tag`\" pulumi-lang-java=\"`tag`\" pulumi-lang-hcl=\"`tag`\"\u003e`tag`\u003c/span\u003e." + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns that limit which changed paths trigger an automatic deployment." + } + }, + "requiredInputs": [ + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Compose resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack." + }, + "autoDeploy": { + "type": "boolean", + "description": "Deploy automatically when the configured trigger fires." + }, + "bitbucketBranch": { + "type": "string", + "description": "Bitbucket branch to deploy." + }, + "bitbucketId": { + "type": "string", + "description": "ID of the configured Bitbucket provider connection." + }, + "bitbucketOwner": { + "type": "string", + "description": "Bitbucket repository owner." + }, + "bitbucketRepository": { + "type": "string", + "description": "Bitbucket repository name." + }, + "bitbucketRepositorySlug": { + "type": "string", + "description": "Bitbucket repository slug." + }, + "branch": { + "type": "string", + "description": "GitHub branch to deploy." + }, + "command": { + "type": "string", + "description": "Custom `docker compose` command to run." + }, + "composeFile": { + "type": "string", + "description": "Inline Compose file contents. Used when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\" pulumi-lang-hcl=\"`raw`\"\u003e`raw`\u003c/span\u003e." + }, + "composePath": { + "type": "string", + "description": "Path to the Compose file within the repository." + }, + "composeStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "composeType": { + "type": "string", + "description": "Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, \u003cspan pulumi-lang-nodejs=\"`stack`\" pulumi-lang-dotnet=\"`Stack`\" pulumi-lang-go=\"`stack`\" pulumi-lang-python=\"`stack`\" pulumi-lang-yaml=\"`stack`\" pulumi-lang-java=\"`stack`\" pulumi-lang-hcl=\"`stack`\"\u003e`stack`\u003c/span\u003e." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the stack was created." + }, + "customGitBranch": { + "type": "string", + "description": "Branch to deploy for a custom Git remote." + }, + "customGitSshKeyId": { + "type": "string", + "description": "SSH key used to clone a private custom Git remote." + }, + "customGitUrl": { + "type": "string", + "description": "Git remote URL, when \u003cspan pulumi-lang-nodejs=\"`sourceType`\" pulumi-lang-dotnet=\"`SourceType`\" pulumi-lang-go=\"`sourceType`\" pulumi-lang-python=\"`source_type`\" pulumi-lang-yaml=\"`sourceType`\" pulumi-lang-java=\"`sourceType`\" pulumi-lang-hcl=\"`source_type`\"\u003e`sourceType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e." + }, + "deleteVolumes": { + "type": "boolean", + "description": "Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\" pulumi-lang-hcl=\"`false`\"\u003e`false`\u003c/span\u003e, which preserves the data." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "enableSubmodules": { + "type": "boolean", + "description": "Clone Git submodules when checking out the repository." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this stack belongs to." + }, + "giteaBranch": { + "type": "string", + "description": "Gitea branch to deploy." + }, + "giteaId": { + "type": "string", + "description": "ID of the configured Gitea provider connection." + }, + "giteaOwner": { + "type": "string", + "description": "Gitea repository owner." + }, + "giteaRepository": { + "type": "string", + "description": "Gitea repository name." + }, + "githubId": { + "type": "string", + "description": "ID of the configured GitHub provider connection." + }, + "gitlabBranch": { + "type": "string", + "description": "GitLab branch to deploy." + }, + "gitlabId": { + "type": "string", + "description": "ID of the configured GitLab provider connection." + }, + "gitlabOwner": { + "type": "string", + "description": "GitLab repository owner." + }, + "gitlabPathNamespace": { + "type": "string", + "description": "Full GitLab namespace path." + }, + "gitlabProjectId": { + "type": "integer", + "description": "Numeric GitLab project ID." + }, + "gitlabRepository": { + "type": "string", + "description": "GitLab repository name." + }, + "isolatedDeployment": { + "type": "boolean", + "description": "Run the stack on its own isolated Docker network." + }, + "isolatedDeploymentsVolume": { + "type": "boolean", + "description": "Prefix volume names for isolated deployments. Retained for backwards compatibility." + }, + "name": { + "type": "string", + "description": "Display name of the stack." + }, + "owner": { + "type": "string", + "description": "GitHub repository owner." + }, + "randomize": { + "type": "boolean", + "description": "Append a random suffix to service and volume names." + }, + "repository": { + "type": "string", + "description": "GitHub repository name." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "sourceType": { + "type": "string", + "description": "Where the Compose file comes from. Valid values: \u003cspan pulumi-lang-nodejs=\"`git`\" pulumi-lang-dotnet=\"`Git`\" pulumi-lang-go=\"`git`\" pulumi-lang-python=\"`git`\" pulumi-lang-yaml=\"`git`\" pulumi-lang-java=\"`git`\" pulumi-lang-hcl=\"`git`\"\u003e`git`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`github`\" pulumi-lang-dotnet=\"`Github`\" pulumi-lang-go=\"`github`\" pulumi-lang-python=\"`github`\" pulumi-lang-yaml=\"`github`\" pulumi-lang-java=\"`github`\" pulumi-lang-hcl=\"`github`\"\u003e`github`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitlab`\" pulumi-lang-dotnet=\"`Gitlab`\" pulumi-lang-go=\"`gitlab`\" pulumi-lang-python=\"`gitlab`\" pulumi-lang-yaml=\"`gitlab`\" pulumi-lang-java=\"`gitlab`\" pulumi-lang-hcl=\"`gitlab`\"\u003e`gitlab`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`bitbucket`\" pulumi-lang-dotnet=\"`Bitbucket`\" pulumi-lang-go=\"`bitbucket`\" pulumi-lang-python=\"`bitbucket`\" pulumi-lang-yaml=\"`bitbucket`\" pulumi-lang-java=\"`bitbucket`\" pulumi-lang-hcl=\"`bitbucket`\"\u003e`bitbucket`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gitea`\" pulumi-lang-dotnet=\"`Gitea`\" pulumi-lang-go=\"`gitea`\" pulumi-lang-python=\"`gitea`\" pulumi-lang-yaml=\"`gitea`\" pulumi-lang-java=\"`gitea`\" pulumi-lang-hcl=\"`gitea`\"\u003e`gitea`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\" pulumi-lang-hcl=\"`raw`\"\u003e`raw`\u003c/span\u003e." + }, + "suffix": { + "type": "string", + "description": "Suffix appended to generated resource names." + }, + "triggerType": { + "type": "string", + "description": "What triggers an automatic deployment. Valid values: \u003cspan pulumi-lang-nodejs=\"`push`\" pulumi-lang-dotnet=\"`Push`\" pulumi-lang-go=\"`push`\" pulumi-lang-python=\"`push`\" pulumi-lang-yaml=\"`push`\" pulumi-lang-java=\"`push`\" pulumi-lang-hcl=\"`push`\"\u003e`push`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tag`\" pulumi-lang-dotnet=\"`Tag`\" pulumi-lang-go=\"`tag`\" pulumi-lang-python=\"`tag`\" pulumi-lang-yaml=\"`tag`\" pulumi-lang-java=\"`tag`\" pulumi-lang-hcl=\"`tag`\"\u003e`tag`\u003c/span\u003e." + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob patterns that limit which changed paths trigger an automatic deployment." + } + }, + "type": "object" + } + }, + "dokploy:index/destination:Destination": { + "properties": { + "accessKey": { + "type": "string", + "description": "S3 access key ID." + }, + "additionalFlags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Extra flags passed to the underlying \u003cspan pulumi-lang-nodejs=\"`rclone`\" pulumi-lang-dotnet=\"`Rclone`\" pulumi-lang-go=\"`rclone`\" pulumi-lang-python=\"`rclone`\" pulumi-lang-yaml=\"`rclone`\" pulumi-lang-java=\"`rclone`\" pulumi-lang-hcl=\"`rclone`\"\u003e`rclone`\u003c/span\u003e invocation." + }, + "bucket": { + "type": "string", + "description": "Bucket name." + }, + "createdAt": { + "type": "string", + "description": "Timestamp of when the destination was created." + }, + "endpoint": { + "type": "string", + "description": "S3 endpoint URL." + }, + "name": { + "type": "string", + "description": "Display name of the destination." + }, + "providerName": { + "type": "string", + "description": "Provider label, for example \u003cspan pulumi-lang-nodejs=\"`s3`\" pulumi-lang-dotnet=\"`S3`\" pulumi-lang-go=\"`s3`\" pulumi-lang-python=\"`s3`\" pulumi-lang-yaml=\"`s3`\" pulumi-lang-java=\"`s3`\" pulumi-lang-hcl=\"`s3`\"\u003e`s3`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`cloudflare`\" pulumi-lang-dotnet=\"`Cloudflare`\" pulumi-lang-go=\"`cloudflare`\" pulumi-lang-python=\"`cloudflare`\" pulumi-lang-yaml=\"`cloudflare`\" pulumi-lang-java=\"`cloudflare`\" pulumi-lang-hcl=\"`cloudflare`\"\u003e`cloudflare`\u003c/span\u003e. Named \u003cspan pulumi-lang-nodejs=\"`providerName`\" pulumi-lang-dotnet=\"`ProviderName`\" pulumi-lang-go=\"`providerName`\" pulumi-lang-python=\"`provider_name`\" pulumi-lang-yaml=\"`providerName`\" pulumi-lang-java=\"`providerName`\" pulumi-lang-hcl=\"`provider_name`\"\u003e`providerName`\u003c/span\u003e because \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\" pulumi-lang-hcl=\"`provider`\"\u003e`provider`\u003c/span\u003e is reserved by Terraform." + }, + "region": { + "type": "string", + "description": "Bucket region, for example `us-east-1`." + }, + "secretAccessKey": { + "type": "string", + "description": "S3 secret access key.", + "secret": true + }, + "serverId": { + "type": "string", + "description": "Server this destination is scoped to." + } + }, + "required": [ + "accessKey", + "additionalFlags", + "bucket", + "createdAt", + "endpoint", + "name", + "region", + "secretAccessKey" + ], + "inputProperties": { + "accessKey": { + "type": "string", + "description": "S3 access key ID." + }, + "additionalFlags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Extra flags passed to the underlying \u003cspan pulumi-lang-nodejs=\"`rclone`\" pulumi-lang-dotnet=\"`Rclone`\" pulumi-lang-go=\"`rclone`\" pulumi-lang-python=\"`rclone`\" pulumi-lang-yaml=\"`rclone`\" pulumi-lang-java=\"`rclone`\" pulumi-lang-hcl=\"`rclone`\"\u003e`rclone`\u003c/span\u003e invocation." + }, + "bucket": { + "type": "string", + "description": "Bucket name." + }, + "endpoint": { + "type": "string", + "description": "S3 endpoint URL." + }, + "name": { + "type": "string", + "description": "Display name of the destination." + }, + "providerName": { + "type": "string", + "description": "Provider label, for example \u003cspan pulumi-lang-nodejs=\"`s3`\" pulumi-lang-dotnet=\"`S3`\" pulumi-lang-go=\"`s3`\" pulumi-lang-python=\"`s3`\" pulumi-lang-yaml=\"`s3`\" pulumi-lang-java=\"`s3`\" pulumi-lang-hcl=\"`s3`\"\u003e`s3`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`cloudflare`\" pulumi-lang-dotnet=\"`Cloudflare`\" pulumi-lang-go=\"`cloudflare`\" pulumi-lang-python=\"`cloudflare`\" pulumi-lang-yaml=\"`cloudflare`\" pulumi-lang-java=\"`cloudflare`\" pulumi-lang-hcl=\"`cloudflare`\"\u003e`cloudflare`\u003c/span\u003e. Named \u003cspan pulumi-lang-nodejs=\"`providerName`\" pulumi-lang-dotnet=\"`ProviderName`\" pulumi-lang-go=\"`providerName`\" pulumi-lang-python=\"`provider_name`\" pulumi-lang-yaml=\"`providerName`\" pulumi-lang-java=\"`providerName`\" pulumi-lang-hcl=\"`provider_name`\"\u003e`providerName`\u003c/span\u003e because \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\" pulumi-lang-hcl=\"`provider`\"\u003e`provider`\u003c/span\u003e is reserved by Terraform." + }, + "region": { + "type": "string", + "description": "Bucket region, for example `us-east-1`." + }, + "secretAccessKey": { + "type": "string", + "description": "S3 secret access key.", + "secret": true + }, + "serverId": { + "type": "string", + "description": "Server this destination is scoped to." + } + }, + "requiredInputs": [ + "accessKey", + "bucket", + "endpoint", + "region", + "secretAccessKey" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Destination resources.\n", + "properties": { + "accessKey": { + "type": "string", + "description": "S3 access key ID." + }, + "additionalFlags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Extra flags passed to the underlying \u003cspan pulumi-lang-nodejs=\"`rclone`\" pulumi-lang-dotnet=\"`Rclone`\" pulumi-lang-go=\"`rclone`\" pulumi-lang-python=\"`rclone`\" pulumi-lang-yaml=\"`rclone`\" pulumi-lang-java=\"`rclone`\" pulumi-lang-hcl=\"`rclone`\"\u003e`rclone`\u003c/span\u003e invocation." + }, + "bucket": { + "type": "string", + "description": "Bucket name." + }, + "createdAt": { + "type": "string", + "description": "Timestamp of when the destination was created." + }, + "endpoint": { + "type": "string", + "description": "S3 endpoint URL." + }, + "name": { + "type": "string", + "description": "Display name of the destination." + }, + "providerName": { + "type": "string", + "description": "Provider label, for example \u003cspan pulumi-lang-nodejs=\"`s3`\" pulumi-lang-dotnet=\"`S3`\" pulumi-lang-go=\"`s3`\" pulumi-lang-python=\"`s3`\" pulumi-lang-yaml=\"`s3`\" pulumi-lang-java=\"`s3`\" pulumi-lang-hcl=\"`s3`\"\u003e`s3`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`cloudflare`\" pulumi-lang-dotnet=\"`Cloudflare`\" pulumi-lang-go=\"`cloudflare`\" pulumi-lang-python=\"`cloudflare`\" pulumi-lang-yaml=\"`cloudflare`\" pulumi-lang-java=\"`cloudflare`\" pulumi-lang-hcl=\"`cloudflare`\"\u003e`cloudflare`\u003c/span\u003e. Named \u003cspan pulumi-lang-nodejs=\"`providerName`\" pulumi-lang-dotnet=\"`ProviderName`\" pulumi-lang-go=\"`providerName`\" pulumi-lang-python=\"`provider_name`\" pulumi-lang-yaml=\"`providerName`\" pulumi-lang-java=\"`providerName`\" pulumi-lang-hcl=\"`provider_name`\"\u003e`providerName`\u003c/span\u003e because \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\" pulumi-lang-hcl=\"`provider`\"\u003e`provider`\u003c/span\u003e is reserved by Terraform." + }, + "region": { + "type": "string", + "description": "Bucket region, for example `us-east-1`." + }, + "secretAccessKey": { + "type": "string", + "description": "S3 secret access key.", + "secret": true + }, + "serverId": { + "type": "string", + "description": "Server this destination is scoped to." + } + }, + "type": "object" + } + }, + "dokploy:index/domain:Domain": { + "properties": { + "applicationId": { + "type": "string", + "description": "Application this domain routes to." + }, + "certificateType": { + "type": "string", + "description": "How TLS certificates are obtained. Use \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e for automatic certificates. Valid values: \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\" pulumi-lang-hcl=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "composeId": { + "type": "string", + "description": "Compose stack this domain routes to." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the domain was created." + }, + "customCertResolver": { + "type": "string", + "description": "Traefik certificate resolver name, when \u003cspan pulumi-lang-nodejs=\"`certificateType`\" pulumi-lang-dotnet=\"`CertificateType`\" pulumi-lang-go=\"`certificateType`\" pulumi-lang-python=\"`certificate_type`\" pulumi-lang-yaml=\"`certificateType`\" pulumi-lang-java=\"`certificateType`\" pulumi-lang-hcl=\"`certificate_type`\"\u003e`certificateType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "customEntrypoint": { + "type": "string", + "description": "Traefik entrypoint to bind, when not using the defaults." + }, + "domainType": { + "type": "string", + "description": "What kind of target this domain points at. Valid values: \u003cspan pulumi-lang-nodejs=\"`compose`\" pulumi-lang-dotnet=\"`Compose`\" pulumi-lang-go=\"`compose`\" pulumi-lang-python=\"`compose`\" pulumi-lang-yaml=\"`compose`\" pulumi-lang-java=\"`compose`\" pulumi-lang-hcl=\"`compose`\"\u003e`compose`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`application`\" pulumi-lang-dotnet=\"`Application`\" pulumi-lang-go=\"`application`\" pulumi-lang-python=\"`application`\" pulumi-lang-yaml=\"`application`\" pulumi-lang-java=\"`application`\" pulumi-lang-hcl=\"`application`\"\u003e`application`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`preview`\" pulumi-lang-dotnet=\"`Preview`\" pulumi-lang-go=\"`preview`\" pulumi-lang-python=\"`preview`\" pulumi-lang-yaml=\"`preview`\" pulumi-lang-java=\"`preview`\" pulumi-lang-hcl=\"`preview`\"\u003e`preview`\u003c/span\u003e." + }, + "forwardAuthEnabled": { + "type": "boolean", + "description": "Protect this domain with Dokploy's forward auth." + }, + "host": { + "type": "string", + "description": "Fully-qualified hostname, for example `api.example.com`." + }, + "https": { + "type": "boolean", + "description": "Serve the domain over HTTPS and redirect HTTP traffic to it." + }, + "internalPath": { + "type": "string", + "description": "Path the request is rewritten to before it reaches the container, defaults to `/`." + }, + "middlewares": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Names of Traefik middlewares to apply." + }, + "path": { + "type": "string", + "description": "Path prefix this domain routes, defaults to `/`." + }, + "port": { + "type": "integer", + "description": "Container port that receives the traffic, defaults to \u003cspan pulumi-lang-nodejs=\"`3000`\" pulumi-lang-dotnet=\"`3000`\" pulumi-lang-go=\"`3000`\" pulumi-lang-python=\"`3000`\" pulumi-lang-yaml=\"`3000`\" pulumi-lang-java=\"`3000`\" pulumi-lang-hcl=\"`3000`\"\u003e`3000`\u003c/span\u003e." + }, + "previewDeploymentId": { + "type": "string", + "description": "Preview deployment this domain routes to." + }, + "serviceName": { + "type": "string", + "description": "Name of the service inside a Compose stack that receives the traffic. Required when \u003cspan pulumi-lang-nodejs=\"`composeId`\" pulumi-lang-dotnet=\"`ComposeId`\" pulumi-lang-go=\"`composeId`\" pulumi-lang-python=\"`compose_id`\" pulumi-lang-yaml=\"`composeId`\" pulumi-lang-java=\"`composeId`\" pulumi-lang-hcl=\"`compose_id`\"\u003e`composeId`\u003c/span\u003e is set." + }, + "stripPath": { + "type": "boolean", + "description": "Strip \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\" pulumi-lang-hcl=\"`path`\"\u003e`path`\u003c/span\u003e from the request before forwarding it." + } + }, + "required": [ + "certificateType", + "createdAt", + "domainType", + "forwardAuthEnabled", + "host", + "https", + "internalPath", + "middlewares", + "path", + "port", + "stripPath" + ], + "inputProperties": { + "applicationId": { + "type": "string", + "description": "Application this domain routes to." + }, + "certificateType": { + "type": "string", + "description": "How TLS certificates are obtained. Use \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e for automatic certificates. Valid values: \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\" pulumi-lang-hcl=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "composeId": { + "type": "string", + "description": "Compose stack this domain routes to." + }, + "customCertResolver": { + "type": "string", + "description": "Traefik certificate resolver name, when \u003cspan pulumi-lang-nodejs=\"`certificateType`\" pulumi-lang-dotnet=\"`CertificateType`\" pulumi-lang-go=\"`certificateType`\" pulumi-lang-python=\"`certificate_type`\" pulumi-lang-yaml=\"`certificateType`\" pulumi-lang-java=\"`certificateType`\" pulumi-lang-hcl=\"`certificate_type`\"\u003e`certificateType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "customEntrypoint": { + "type": "string", + "description": "Traefik entrypoint to bind, when not using the defaults." + }, + "domainType": { + "type": "string", + "description": "What kind of target this domain points at. Valid values: \u003cspan pulumi-lang-nodejs=\"`compose`\" pulumi-lang-dotnet=\"`Compose`\" pulumi-lang-go=\"`compose`\" pulumi-lang-python=\"`compose`\" pulumi-lang-yaml=\"`compose`\" pulumi-lang-java=\"`compose`\" pulumi-lang-hcl=\"`compose`\"\u003e`compose`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`application`\" pulumi-lang-dotnet=\"`Application`\" pulumi-lang-go=\"`application`\" pulumi-lang-python=\"`application`\" pulumi-lang-yaml=\"`application`\" pulumi-lang-java=\"`application`\" pulumi-lang-hcl=\"`application`\"\u003e`application`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`preview`\" pulumi-lang-dotnet=\"`Preview`\" pulumi-lang-go=\"`preview`\" pulumi-lang-python=\"`preview`\" pulumi-lang-yaml=\"`preview`\" pulumi-lang-java=\"`preview`\" pulumi-lang-hcl=\"`preview`\"\u003e`preview`\u003c/span\u003e." + }, + "forwardAuthEnabled": { + "type": "boolean", + "description": "Protect this domain with Dokploy's forward auth." + }, + "host": { + "type": "string", + "description": "Fully-qualified hostname, for example `api.example.com`." + }, + "https": { + "type": "boolean", + "description": "Serve the domain over HTTPS and redirect HTTP traffic to it." + }, + "internalPath": { + "type": "string", + "description": "Path the request is rewritten to before it reaches the container, defaults to `/`." + }, + "middlewares": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Names of Traefik middlewares to apply." + }, + "path": { + "type": "string", + "description": "Path prefix this domain routes, defaults to `/`." + }, + "port": { + "type": "integer", + "description": "Container port that receives the traffic, defaults to \u003cspan pulumi-lang-nodejs=\"`3000`\" pulumi-lang-dotnet=\"`3000`\" pulumi-lang-go=\"`3000`\" pulumi-lang-python=\"`3000`\" pulumi-lang-yaml=\"`3000`\" pulumi-lang-java=\"`3000`\" pulumi-lang-hcl=\"`3000`\"\u003e`3000`\u003c/span\u003e." + }, + "previewDeploymentId": { + "type": "string", + "description": "Preview deployment this domain routes to." + }, + "serviceName": { + "type": "string", + "description": "Name of the service inside a Compose stack that receives the traffic. Required when \u003cspan pulumi-lang-nodejs=\"`composeId`\" pulumi-lang-dotnet=\"`ComposeId`\" pulumi-lang-go=\"`composeId`\" pulumi-lang-python=\"`compose_id`\" pulumi-lang-yaml=\"`composeId`\" pulumi-lang-java=\"`composeId`\" pulumi-lang-hcl=\"`compose_id`\"\u003e`composeId`\u003c/span\u003e is set." + }, + "stripPath": { + "type": "boolean", + "description": "Strip \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\" pulumi-lang-hcl=\"`path`\"\u003e`path`\u003c/span\u003e from the request before forwarding it." + } + }, + "requiredInputs": [ + "host" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Domain resources.\n", + "properties": { + "applicationId": { + "type": "string", + "description": "Application this domain routes to." + }, + "certificateType": { + "type": "string", + "description": "How TLS certificates are obtained. Use \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e for automatic certificates. Valid values: \u003cspan pulumi-lang-nodejs=\"`letsencrypt`\" pulumi-lang-dotnet=\"`Letsencrypt`\" pulumi-lang-go=\"`letsencrypt`\" pulumi-lang-python=\"`letsencrypt`\" pulumi-lang-yaml=\"`letsencrypt`\" pulumi-lang-java=\"`letsencrypt`\" pulumi-lang-hcl=\"`letsencrypt`\"\u003e`letsencrypt`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\" pulumi-lang-hcl=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "composeId": { + "type": "string", + "description": "Compose stack this domain routes to." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the domain was created." + }, + "customCertResolver": { + "type": "string", + "description": "Traefik certificate resolver name, when \u003cspan pulumi-lang-nodejs=\"`certificateType`\" pulumi-lang-dotnet=\"`CertificateType`\" pulumi-lang-go=\"`certificateType`\" pulumi-lang-python=\"`certificate_type`\" pulumi-lang-yaml=\"`certificateType`\" pulumi-lang-java=\"`certificateType`\" pulumi-lang-hcl=\"`certificate_type`\"\u003e`certificateType`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\" pulumi-lang-hcl=\"`custom`\"\u003e`custom`\u003c/span\u003e." + }, + "customEntrypoint": { + "type": "string", + "description": "Traefik entrypoint to bind, when not using the defaults." + }, + "domainType": { + "type": "string", + "description": "What kind of target this domain points at. Valid values: \u003cspan pulumi-lang-nodejs=\"`compose`\" pulumi-lang-dotnet=\"`Compose`\" pulumi-lang-go=\"`compose`\" pulumi-lang-python=\"`compose`\" pulumi-lang-yaml=\"`compose`\" pulumi-lang-java=\"`compose`\" pulumi-lang-hcl=\"`compose`\"\u003e`compose`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`application`\" pulumi-lang-dotnet=\"`Application`\" pulumi-lang-go=\"`application`\" pulumi-lang-python=\"`application`\" pulumi-lang-yaml=\"`application`\" pulumi-lang-java=\"`application`\" pulumi-lang-hcl=\"`application`\"\u003e`application`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`preview`\" pulumi-lang-dotnet=\"`Preview`\" pulumi-lang-go=\"`preview`\" pulumi-lang-python=\"`preview`\" pulumi-lang-yaml=\"`preview`\" pulumi-lang-java=\"`preview`\" pulumi-lang-hcl=\"`preview`\"\u003e`preview`\u003c/span\u003e." + }, + "forwardAuthEnabled": { + "type": "boolean", + "description": "Protect this domain with Dokploy's forward auth." + }, + "host": { + "type": "string", + "description": "Fully-qualified hostname, for example `api.example.com`." + }, + "https": { + "type": "boolean", + "description": "Serve the domain over HTTPS and redirect HTTP traffic to it." + }, + "internalPath": { + "type": "string", + "description": "Path the request is rewritten to before it reaches the container, defaults to `/`." + }, + "middlewares": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Names of Traefik middlewares to apply." + }, + "path": { + "type": "string", + "description": "Path prefix this domain routes, defaults to `/`." + }, + "port": { + "type": "integer", + "description": "Container port that receives the traffic, defaults to \u003cspan pulumi-lang-nodejs=\"`3000`\" pulumi-lang-dotnet=\"`3000`\" pulumi-lang-go=\"`3000`\" pulumi-lang-python=\"`3000`\" pulumi-lang-yaml=\"`3000`\" pulumi-lang-java=\"`3000`\" pulumi-lang-hcl=\"`3000`\"\u003e`3000`\u003c/span\u003e." + }, + "previewDeploymentId": { + "type": "string", + "description": "Preview deployment this domain routes to." + }, + "serviceName": { + "type": "string", + "description": "Name of the service inside a Compose stack that receives the traffic. Required when \u003cspan pulumi-lang-nodejs=\"`composeId`\" pulumi-lang-dotnet=\"`ComposeId`\" pulumi-lang-go=\"`composeId`\" pulumi-lang-python=\"`compose_id`\" pulumi-lang-yaml=\"`composeId`\" pulumi-lang-java=\"`composeId`\" pulumi-lang-hcl=\"`compose_id`\"\u003e`composeId`\u003c/span\u003e is set." + }, + "stripPath": { + "type": "boolean", + "description": "Strip \u003cspan pulumi-lang-nodejs=\"`path`\" pulumi-lang-dotnet=\"`Path`\" pulumi-lang-go=\"`path`\" pulumi-lang-python=\"`path`\" pulumi-lang-yaml=\"`path`\" pulumi-lang-java=\"`path`\" pulumi-lang-hcl=\"`path`\"\u003e`path`\u003c/span\u003e from the request before forwarding it." + } + }, + "type": "object" + } + }, + "dokploy:index/environment:Environment": { + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the environment was created." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "env": { + "type": "string", + "description": "Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment." + }, + "isDefault": { + "type": "boolean", + "description": "Whether this is the project's default environment." + }, + "name": { + "type": "string", + "description": "Environment name, for example \u003cspan pulumi-lang-nodejs=\"`staging`\" pulumi-lang-dotnet=\"`Staging`\" pulumi-lang-go=\"`staging`\" pulumi-lang-python=\"`staging`\" pulumi-lang-yaml=\"`staging`\" pulumi-lang-java=\"`staging`\" pulumi-lang-hcl=\"`staging`\"\u003e`staging`\u003c/span\u003e." + }, + "projectId": { + "type": "string", + "description": "Project this environment belongs to." + } + }, + "required": [ + "createdAt", + "env", + "isDefault", + "name", + "projectId" + ], + "inputProperties": { + "description": { + "type": "string", + "description": "Free-form description." + }, + "env": { + "type": "string", + "description": "Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment." + }, + "name": { + "type": "string", + "description": "Environment name, for example \u003cspan pulumi-lang-nodejs=\"`staging`\" pulumi-lang-dotnet=\"`Staging`\" pulumi-lang-go=\"`staging`\" pulumi-lang-python=\"`staging`\" pulumi-lang-yaml=\"`staging`\" pulumi-lang-java=\"`staging`\" pulumi-lang-hcl=\"`staging`\"\u003e`staging`\u003c/span\u003e." + }, + "projectId": { + "type": "string", + "description": "Project this environment belongs to." + } + }, + "requiredInputs": [ + "projectId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Environment resources.\n", + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the environment was created." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "env": { + "type": "string", + "description": "Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment." + }, + "isDefault": { + "type": "boolean", + "description": "Whether this is the project's default environment." + }, + "name": { + "type": "string", + "description": "Environment name, for example \u003cspan pulumi-lang-nodejs=\"`staging`\" pulumi-lang-dotnet=\"`Staging`\" pulumi-lang-go=\"`staging`\" pulumi-lang-python=\"`staging`\" pulumi-lang-yaml=\"`staging`\" pulumi-lang-java=\"`staging`\" pulumi-lang-hcl=\"`staging`\"\u003e`staging`\u003c/span\u003e." + }, + "projectId": { + "type": "string", + "description": "Project this environment belongs to." + } + }, + "type": "object" + } + }, + "dokploy:index/mariaDb:MariaDb": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseRootPassword": { + "type": "string", + "description": "Password for the MariaDB \u003cspan pulumi-lang-nodejs=\"`root`\" pulumi-lang-dotnet=\"`Root`\" pulumi-lang-go=\"`root`\" pulumi-lang-python=\"`root`\" pulumi-lang-yaml=\"`root`\" pulumi-lang-java=\"`root`\" pulumi-lang-hcl=\"`root`\"\u003e`root`\u003c/span\u003e user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MariaDB image to run, for example `mariadb:11`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "required": [ + "appName", + "applicationStatus", + "args", + "createdAt", + "databaseName", + "databasePassword", + "databaseRootPassword", + "databaseUser", + "detachDokployNetwork", + "dockerImage", + "environmentId", + "name", + "networkIds", + "replicas" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseRootPassword": { + "type": "string", + "description": "Password for the MariaDB \u003cspan pulumi-lang-nodejs=\"`root`\" pulumi-lang-dotnet=\"`Root`\" pulumi-lang-go=\"`root`\" pulumi-lang-python=\"`root`\" pulumi-lang-yaml=\"`root`\" pulumi-lang-java=\"`root`\" pulumi-lang-hcl=\"`root`\"\u003e`root`\u003c/span\u003e user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MariaDB image to run, for example `mariadb:11`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "requiredInputs": [ + "databaseName", + "databasePassword", + "databaseRootPassword", + "databaseUser", + "dockerImage", + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering MariaDb resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseRootPassword": { + "type": "string", + "description": "Password for the MariaDB \u003cspan pulumi-lang-nodejs=\"`root`\" pulumi-lang-dotnet=\"`Root`\" pulumi-lang-go=\"`root`\" pulumi-lang-python=\"`root`\" pulumi-lang-yaml=\"`root`\" pulumi-lang-java=\"`root`\" pulumi-lang-hcl=\"`root`\"\u003e`root`\u003c/span\u003e user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MariaDB image to run, for example `mariadb:11`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "type": "object" + } + }, + "dokploy:index/mongo:Mongo": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databasePassword": { + "type": "string", + "description": "Password for the root user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Root username to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MongoDB image to run. Defaults to `mongo:8`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicaSets": { + "type": "boolean", + "description": "Start the instance as a single-node replica set." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "required": [ + "appName", + "applicationStatus", + "args", + "createdAt", + "databasePassword", + "databaseUser", + "detachDokployNetwork", + "dockerImage", + "environmentId", + "name", + "networkIds", + "replicaSets", + "replicas" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "databasePassword": { + "type": "string", + "description": "Password for the root user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Root username to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MongoDB image to run. Defaults to `mongo:8`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicaSets": { + "type": "boolean", + "description": "Start the instance as a single-node replica set." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "requiredInputs": [ + "databasePassword", + "databaseUser", + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Mongo resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databasePassword": { + "type": "string", + "description": "Password for the root user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Root username to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MongoDB image to run. Defaults to `mongo:8`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicaSets": { + "type": "boolean", + "description": "Start the instance as a single-node replica set." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "type": "object" + } + }, + "dokploy:index/mount:Mount": { + "properties": { + "content": { + "type": "string", + "description": "Contents of the generated file, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "filePath": { + "type": "string", + "description": "Path of the generated file, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "hostPath": { + "type": "string", + "description": "Path on the host, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`bind`\" pulumi-lang-dotnet=\"`Bind`\" pulumi-lang-go=\"`bind`\" pulumi-lang-python=\"`bind`\" pulumi-lang-yaml=\"`bind`\" pulumi-lang-java=\"`bind`\" pulumi-lang-hcl=\"`bind`\"\u003e`bind`\u003c/span\u003e." + }, + "mountPath": { + "type": "string", + "description": "Path inside the container where the mount appears." + }, + "serviceId": { + "type": "string", + "description": "ID of the service this mount attaches to. Must match \u003cspan pulumi-lang-nodejs=\"`serviceType`\" pulumi-lang-dotnet=\"`ServiceType`\" pulumi-lang-go=\"`serviceType`\" pulumi-lang-python=\"`service_type`\" pulumi-lang-yaml=\"`serviceType`\" pulumi-lang-java=\"`serviceType`\" pulumi-lang-hcl=\"`service_type`\"\u003e`serviceType`\u003c/span\u003e — an application ID, a compose ID, a postgres ID, and so on." + }, + "serviceType": { + "type": "string", + "description": "The kind of service this mount attaches to. Valid values: \u003cspan pulumi-lang-nodejs=\"`application`\" pulumi-lang-dotnet=\"`Application`\" pulumi-lang-go=\"`application`\" pulumi-lang-python=\"`application`\" pulumi-lang-yaml=\"`application`\" pulumi-lang-java=\"`application`\" pulumi-lang-hcl=\"`application`\"\u003e`application`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`postgres`\" pulumi-lang-dotnet=\"`Postgres`\" pulumi-lang-go=\"`postgres`\" pulumi-lang-python=\"`postgres`\" pulumi-lang-yaml=\"`postgres`\" pulumi-lang-java=\"`postgres`\" pulumi-lang-hcl=\"`postgres`\"\u003e`postgres`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mysql`\" pulumi-lang-dotnet=\"`Mysql`\" pulumi-lang-go=\"`mysql`\" pulumi-lang-python=\"`mysql`\" pulumi-lang-yaml=\"`mysql`\" pulumi-lang-java=\"`mysql`\" pulumi-lang-hcl=\"`mysql`\"\u003e`mysql`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mariadb`\" pulumi-lang-dotnet=\"`Mariadb`\" pulumi-lang-go=\"`mariadb`\" pulumi-lang-python=\"`mariadb`\" pulumi-lang-yaml=\"`mariadb`\" pulumi-lang-java=\"`mariadb`\" pulumi-lang-hcl=\"`mariadb`\"\u003e`mariadb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mongo`\" pulumi-lang-dotnet=\"`Mongo`\" pulumi-lang-go=\"`mongo`\" pulumi-lang-python=\"`mongo`\" pulumi-lang-yaml=\"`mongo`\" pulumi-lang-java=\"`mongo`\" pulumi-lang-hcl=\"`mongo`\"\u003e`mongo`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`redis`\" pulumi-lang-dotnet=\"`Redis`\" pulumi-lang-go=\"`redis`\" pulumi-lang-python=\"`redis`\" pulumi-lang-yaml=\"`redis`\" pulumi-lang-java=\"`redis`\" pulumi-lang-hcl=\"`redis`\"\u003e`redis`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`compose`\" pulumi-lang-dotnet=\"`Compose`\" pulumi-lang-go=\"`compose`\" pulumi-lang-python=\"`compose`\" pulumi-lang-yaml=\"`compose`\" pulumi-lang-java=\"`compose`\" pulumi-lang-hcl=\"`compose`\"\u003e`compose`\u003c/span\u003e." + }, + "type": { + "type": "string", + "description": "The kind of mount to create. Valid values: \u003cspan pulumi-lang-nodejs=\"`bind`\" pulumi-lang-dotnet=\"`Bind`\" pulumi-lang-go=\"`bind`\" pulumi-lang-python=\"`bind`\" pulumi-lang-yaml=\"`bind`\" pulumi-lang-java=\"`bind`\" pulumi-lang-hcl=\"`bind`\"\u003e`bind`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\" pulumi-lang-hcl=\"`volume`\"\u003e`volume`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "volumeName": { + "type": "string", + "description": "Name of the Docker volume, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\" pulumi-lang-hcl=\"`volume`\"\u003e`volume`\u003c/span\u003e." + } + }, + "required": [ + "mountPath", + "serviceId", + "serviceType", + "type" + ], + "inputProperties": { + "content": { + "type": "string", + "description": "Contents of the generated file, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "filePath": { + "type": "string", + "description": "Path of the generated file, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "hostPath": { + "type": "string", + "description": "Path on the host, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`bind`\" pulumi-lang-dotnet=\"`Bind`\" pulumi-lang-go=\"`bind`\" pulumi-lang-python=\"`bind`\" pulumi-lang-yaml=\"`bind`\" pulumi-lang-java=\"`bind`\" pulumi-lang-hcl=\"`bind`\"\u003e`bind`\u003c/span\u003e." + }, + "mountPath": { + "type": "string", + "description": "Path inside the container where the mount appears." + }, + "serviceId": { + "type": "string", + "description": "ID of the service this mount attaches to. Must match \u003cspan pulumi-lang-nodejs=\"`serviceType`\" pulumi-lang-dotnet=\"`ServiceType`\" pulumi-lang-go=\"`serviceType`\" pulumi-lang-python=\"`service_type`\" pulumi-lang-yaml=\"`serviceType`\" pulumi-lang-java=\"`serviceType`\" pulumi-lang-hcl=\"`service_type`\"\u003e`serviceType`\u003c/span\u003e — an application ID, a compose ID, a postgres ID, and so on." + }, + "serviceType": { + "type": "string", + "description": "The kind of service this mount attaches to. Valid values: \u003cspan pulumi-lang-nodejs=\"`application`\" pulumi-lang-dotnet=\"`Application`\" pulumi-lang-go=\"`application`\" pulumi-lang-python=\"`application`\" pulumi-lang-yaml=\"`application`\" pulumi-lang-java=\"`application`\" pulumi-lang-hcl=\"`application`\"\u003e`application`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`postgres`\" pulumi-lang-dotnet=\"`Postgres`\" pulumi-lang-go=\"`postgres`\" pulumi-lang-python=\"`postgres`\" pulumi-lang-yaml=\"`postgres`\" pulumi-lang-java=\"`postgres`\" pulumi-lang-hcl=\"`postgres`\"\u003e`postgres`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mysql`\" pulumi-lang-dotnet=\"`Mysql`\" pulumi-lang-go=\"`mysql`\" pulumi-lang-python=\"`mysql`\" pulumi-lang-yaml=\"`mysql`\" pulumi-lang-java=\"`mysql`\" pulumi-lang-hcl=\"`mysql`\"\u003e`mysql`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mariadb`\" pulumi-lang-dotnet=\"`Mariadb`\" pulumi-lang-go=\"`mariadb`\" pulumi-lang-python=\"`mariadb`\" pulumi-lang-yaml=\"`mariadb`\" pulumi-lang-java=\"`mariadb`\" pulumi-lang-hcl=\"`mariadb`\"\u003e`mariadb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mongo`\" pulumi-lang-dotnet=\"`Mongo`\" pulumi-lang-go=\"`mongo`\" pulumi-lang-python=\"`mongo`\" pulumi-lang-yaml=\"`mongo`\" pulumi-lang-java=\"`mongo`\" pulumi-lang-hcl=\"`mongo`\"\u003e`mongo`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`redis`\" pulumi-lang-dotnet=\"`Redis`\" pulumi-lang-go=\"`redis`\" pulumi-lang-python=\"`redis`\" pulumi-lang-yaml=\"`redis`\" pulumi-lang-java=\"`redis`\" pulumi-lang-hcl=\"`redis`\"\u003e`redis`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`compose`\" pulumi-lang-dotnet=\"`Compose`\" pulumi-lang-go=\"`compose`\" pulumi-lang-python=\"`compose`\" pulumi-lang-yaml=\"`compose`\" pulumi-lang-java=\"`compose`\" pulumi-lang-hcl=\"`compose`\"\u003e`compose`\u003c/span\u003e." + }, + "type": { + "type": "string", + "description": "The kind of mount to create. Valid values: \u003cspan pulumi-lang-nodejs=\"`bind`\" pulumi-lang-dotnet=\"`Bind`\" pulumi-lang-go=\"`bind`\" pulumi-lang-python=\"`bind`\" pulumi-lang-yaml=\"`bind`\" pulumi-lang-java=\"`bind`\" pulumi-lang-hcl=\"`bind`\"\u003e`bind`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\" pulumi-lang-hcl=\"`volume`\"\u003e`volume`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "volumeName": { + "type": "string", + "description": "Name of the Docker volume, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\" pulumi-lang-hcl=\"`volume`\"\u003e`volume`\u003c/span\u003e." + } + }, + "requiredInputs": [ + "mountPath", + "serviceId", + "serviceType", + "type" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Mount resources.\n", + "properties": { + "content": { + "type": "string", + "description": "Contents of the generated file, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "filePath": { + "type": "string", + "description": "Path of the generated file, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "hostPath": { + "type": "string", + "description": "Path on the host, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`bind`\" pulumi-lang-dotnet=\"`Bind`\" pulumi-lang-go=\"`bind`\" pulumi-lang-python=\"`bind`\" pulumi-lang-yaml=\"`bind`\" pulumi-lang-java=\"`bind`\" pulumi-lang-hcl=\"`bind`\"\u003e`bind`\u003c/span\u003e." + }, + "mountPath": { + "type": "string", + "description": "Path inside the container where the mount appears." + }, + "serviceId": { + "type": "string", + "description": "ID of the service this mount attaches to. Must match \u003cspan pulumi-lang-nodejs=\"`serviceType`\" pulumi-lang-dotnet=\"`ServiceType`\" pulumi-lang-go=\"`serviceType`\" pulumi-lang-python=\"`service_type`\" pulumi-lang-yaml=\"`serviceType`\" pulumi-lang-java=\"`serviceType`\" pulumi-lang-hcl=\"`service_type`\"\u003e`serviceType`\u003c/span\u003e — an application ID, a compose ID, a postgres ID, and so on." + }, + "serviceType": { + "type": "string", + "description": "The kind of service this mount attaches to. Valid values: \u003cspan pulumi-lang-nodejs=\"`application`\" pulumi-lang-dotnet=\"`Application`\" pulumi-lang-go=\"`application`\" pulumi-lang-python=\"`application`\" pulumi-lang-yaml=\"`application`\" pulumi-lang-java=\"`application`\" pulumi-lang-hcl=\"`application`\"\u003e`application`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`postgres`\" pulumi-lang-dotnet=\"`Postgres`\" pulumi-lang-go=\"`postgres`\" pulumi-lang-python=\"`postgres`\" pulumi-lang-yaml=\"`postgres`\" pulumi-lang-java=\"`postgres`\" pulumi-lang-hcl=\"`postgres`\"\u003e`postgres`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mysql`\" pulumi-lang-dotnet=\"`Mysql`\" pulumi-lang-go=\"`mysql`\" pulumi-lang-python=\"`mysql`\" pulumi-lang-yaml=\"`mysql`\" pulumi-lang-java=\"`mysql`\" pulumi-lang-hcl=\"`mysql`\"\u003e`mysql`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mariadb`\" pulumi-lang-dotnet=\"`Mariadb`\" pulumi-lang-go=\"`mariadb`\" pulumi-lang-python=\"`mariadb`\" pulumi-lang-yaml=\"`mariadb`\" pulumi-lang-java=\"`mariadb`\" pulumi-lang-hcl=\"`mariadb`\"\u003e`mariadb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mongo`\" pulumi-lang-dotnet=\"`Mongo`\" pulumi-lang-go=\"`mongo`\" pulumi-lang-python=\"`mongo`\" pulumi-lang-yaml=\"`mongo`\" pulumi-lang-java=\"`mongo`\" pulumi-lang-hcl=\"`mongo`\"\u003e`mongo`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`redis`\" pulumi-lang-dotnet=\"`Redis`\" pulumi-lang-go=\"`redis`\" pulumi-lang-python=\"`redis`\" pulumi-lang-yaml=\"`redis`\" pulumi-lang-java=\"`redis`\" pulumi-lang-hcl=\"`redis`\"\u003e`redis`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`compose`\" pulumi-lang-dotnet=\"`Compose`\" pulumi-lang-go=\"`compose`\" pulumi-lang-python=\"`compose`\" pulumi-lang-yaml=\"`compose`\" pulumi-lang-java=\"`compose`\" pulumi-lang-hcl=\"`compose`\"\u003e`compose`\u003c/span\u003e." + }, + "type": { + "type": "string", + "description": "The kind of mount to create. Valid values: \u003cspan pulumi-lang-nodejs=\"`bind`\" pulumi-lang-dotnet=\"`Bind`\" pulumi-lang-go=\"`bind`\" pulumi-lang-python=\"`bind`\" pulumi-lang-yaml=\"`bind`\" pulumi-lang-java=\"`bind`\" pulumi-lang-hcl=\"`bind`\"\u003e`bind`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\" pulumi-lang-hcl=\"`volume`\"\u003e`volume`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`file`\" pulumi-lang-dotnet=\"`File`\" pulumi-lang-go=\"`file`\" pulumi-lang-python=\"`file`\" pulumi-lang-yaml=\"`file`\" pulumi-lang-java=\"`file`\" pulumi-lang-hcl=\"`file`\"\u003e`file`\u003c/span\u003e." + }, + "volumeName": { + "type": "string", + "description": "Name of the Docker volume, when \u003cspan pulumi-lang-nodejs=\"`type`\" pulumi-lang-dotnet=\"`Type`\" pulumi-lang-go=\"`type`\" pulumi-lang-python=\"`type`\" pulumi-lang-yaml=\"`type`\" pulumi-lang-java=\"`type`\" pulumi-lang-hcl=\"`type`\"\u003e`type`\u003c/span\u003e is \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\" pulumi-lang-hcl=\"`volume`\"\u003e`volume`\u003c/span\u003e." + } + }, + "type": "object" + } + }, + "dokploy:index/mySql:MySql": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseRootPassword": { + "type": "string", + "description": "Password for the MySQL \u003cspan pulumi-lang-nodejs=\"`root`\" pulumi-lang-dotnet=\"`Root`\" pulumi-lang-go=\"`root`\" pulumi-lang-python=\"`root`\" pulumi-lang-yaml=\"`root`\" pulumi-lang-java=\"`root`\" pulumi-lang-hcl=\"`root`\"\u003e`root`\u003c/span\u003e user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MySQL image to run, for example `mysql:8`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "required": [ + "appName", + "applicationStatus", + "args", + "createdAt", + "databaseName", + "databasePassword", + "databaseRootPassword", + "databaseUser", + "detachDokployNetwork", + "dockerImage", + "environmentId", + "name", + "networkIds", + "replicas" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseRootPassword": { + "type": "string", + "description": "Password for the MySQL \u003cspan pulumi-lang-nodejs=\"`root`\" pulumi-lang-dotnet=\"`Root`\" pulumi-lang-go=\"`root`\" pulumi-lang-python=\"`root`\" pulumi-lang-yaml=\"`root`\" pulumi-lang-java=\"`root`\" pulumi-lang-hcl=\"`root`\"\u003e`root`\u003c/span\u003e user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MySQL image to run, for example `mysql:8`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "requiredInputs": [ + "databaseName", + "databasePassword", + "databaseRootPassword", + "databaseUser", + "dockerImage", + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering MySql resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseRootPassword": { + "type": "string", + "description": "Password for the MySQL \u003cspan pulumi-lang-nodejs=\"`root`\" pulumi-lang-dotnet=\"`Root`\" pulumi-lang-go=\"`root`\" pulumi-lang-python=\"`root`\" pulumi-lang-yaml=\"`root`\" pulumi-lang-java=\"`root`\" pulumi-lang-hcl=\"`root`\"\u003e`root`\u003c/span\u003e user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "MySQL image to run, for example `mysql:8`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "type": "object" + } + }, + "dokploy:index/port:Port": { + "properties": { + "applicationId": { + "type": "string", + "description": "Application this port belongs to." + }, + "protocol": { + "type": "string", + "description": "Transport protocol. Valid values: \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\" pulumi-lang-hcl=\"`tcp`\"\u003e`tcp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\" pulumi-lang-hcl=\"`udp`\"\u003e`udp`\u003c/span\u003e." + }, + "publishMode": { + "type": "string", + "description": "Docker Swarm publish mode. \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\" pulumi-lang-hcl=\"`host`\"\u003e`host`\u003c/span\u003e binds directly to the node; \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\" pulumi-lang-hcl=\"`ingress`\"\u003e`ingress`\u003c/span\u003e uses the swarm routing mesh. Valid values: \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\" pulumi-lang-hcl=\"`ingress`\"\u003e`ingress`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\" pulumi-lang-hcl=\"`host`\"\u003e`host`\u003c/span\u003e." + }, + "publishedPort": { + "type": "integer", + "description": "Port exposed on the host." + }, + "targetPort": { + "type": "integer", + "description": "Port the container listens on." + } + }, + "required": [ + "applicationId", + "protocol", + "publishMode", + "publishedPort", + "targetPort" + ], + "inputProperties": { + "applicationId": { + "type": "string", + "description": "Application this port belongs to." + }, + "protocol": { + "type": "string", + "description": "Transport protocol. Valid values: \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\" pulumi-lang-hcl=\"`tcp`\"\u003e`tcp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\" pulumi-lang-hcl=\"`udp`\"\u003e`udp`\u003c/span\u003e." + }, + "publishMode": { + "type": "string", + "description": "Docker Swarm publish mode. \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\" pulumi-lang-hcl=\"`host`\"\u003e`host`\u003c/span\u003e binds directly to the node; \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\" pulumi-lang-hcl=\"`ingress`\"\u003e`ingress`\u003c/span\u003e uses the swarm routing mesh. Valid values: \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\" pulumi-lang-hcl=\"`ingress`\"\u003e`ingress`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\" pulumi-lang-hcl=\"`host`\"\u003e`host`\u003c/span\u003e." + }, + "publishedPort": { + "type": "integer", + "description": "Port exposed on the host." + }, + "targetPort": { + "type": "integer", + "description": "Port the container listens on." + } + }, + "requiredInputs": [ + "applicationId", + "protocol", + "publishedPort", + "targetPort" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Port resources.\n", + "properties": { + "applicationId": { + "type": "string", + "description": "Application this port belongs to." + }, + "protocol": { + "type": "string", + "description": "Transport protocol. Valid values: \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\" pulumi-lang-hcl=\"`tcp`\"\u003e`tcp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\" pulumi-lang-hcl=\"`udp`\"\u003e`udp`\u003c/span\u003e." + }, + "publishMode": { + "type": "string", + "description": "Docker Swarm publish mode. \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\" pulumi-lang-hcl=\"`host`\"\u003e`host`\u003c/span\u003e binds directly to the node; \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\" pulumi-lang-hcl=\"`ingress`\"\u003e`ingress`\u003c/span\u003e uses the swarm routing mesh. Valid values: \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\" pulumi-lang-hcl=\"`ingress`\"\u003e`ingress`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\" pulumi-lang-hcl=\"`host`\"\u003e`host`\u003c/span\u003e." + }, + "publishedPort": { + "type": "integer", + "description": "Port exposed on the host." + }, + "targetPort": { + "type": "integer", + "description": "Port the container listens on." + } + }, + "type": "object" + } + }, + "dokploy:index/postgres:Postgres": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "PostgreSQL image to run, for example `postgres:16`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "required": [ + "appName", + "applicationStatus", + "args", + "createdAt", + "databaseName", + "databasePassword", + "databaseUser", + "detachDokployNetwork", + "dockerImage", + "environmentId", + "name", + "networkIds", + "replicas" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "PostgreSQL image to run, for example `postgres:16`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "requiredInputs": [ + "databaseName", + "databasePassword", + "databaseUser", + "dockerImage", + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Postgres resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databaseName": { + "type": "string", + "description": "Name of the database to create." + }, + "databasePassword": { + "type": "string", + "description": "Password for the database user.", + "secret": true + }, + "databaseUser": { + "type": "string", + "description": "Database user to create." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "PostgreSQL image to run, for example `postgres:16`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "type": "object" + } + }, + "dokploy:index/project:Project": { + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the project was created." + }, + "defaultEnvironmentId": { + "type": "string", + "description": "ID of the \u003cspan pulumi-lang-nodejs=\"`production`\" pulumi-lang-dotnet=\"`Production`\" pulumi-lang-go=\"`production`\" pulumi-lang-python=\"`production`\" pulumi-lang-yaml=\"`production`\" pulumi-lang-java=\"`production`\" pulumi-lang-hcl=\"`production`\"\u003e`production`\u003c/span\u003e environment that Dokploy creates automatically with the project." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "env": { + "type": "string", + "description": "Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project." + }, + "name": { + "type": "string", + "description": "Display name of the project." + }, + "organizationId": { + "type": "string", + "description": "Organization that owns the project." + } + }, + "required": [ + "createdAt", + "defaultEnvironmentId", + "env", + "name", + "organizationId" + ], + "inputProperties": { + "description": { + "type": "string", + "description": "Free-form description." + }, + "env": { + "type": "string", + "description": "Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project." + }, + "name": { + "type": "string", + "description": "Display name of the project." + } + }, + "stateInputs": { + "description": "Input properties used for looking up and filtering Project resources.\n", + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the project was created." + }, + "defaultEnvironmentId": { + "type": "string", + "description": "ID of the \u003cspan pulumi-lang-nodejs=\"`production`\" pulumi-lang-dotnet=\"`Production`\" pulumi-lang-go=\"`production`\" pulumi-lang-python=\"`production`\" pulumi-lang-yaml=\"`production`\" pulumi-lang-java=\"`production`\" pulumi-lang-hcl=\"`production`\"\u003e`production`\u003c/span\u003e environment that Dokploy creates automatically with the project." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "env": { + "type": "string", + "description": "Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project." + }, + "name": { + "type": "string", + "description": "Display name of the project." + }, + "organizationId": { + "type": "string", + "description": "Organization that owns the project." + } + }, + "type": "object" + } + }, + "dokploy:index/redirect:Redirect": { + "properties": { + "applicationId": { + "type": "string", + "description": "Application this redirect belongs to." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the redirect was created." + }, + "permanent": { + "type": "boolean", + "description": "Issue a permanent (301) redirect instead of a temporary (302) one." + }, + "regex": { + "type": "string", + "description": "Regular expression matched against the incoming URL." + }, + "replacement": { + "type": "string", + "description": "Replacement URL, which may reference capture groups such as `${1}`." + } + }, + "required": [ + "applicationId", + "createdAt", + "permanent", + "regex", + "replacement" + ], + "inputProperties": { + "applicationId": { + "type": "string", + "description": "Application this redirect belongs to." + }, + "permanent": { + "type": "boolean", + "description": "Issue a permanent (301) redirect instead of a temporary (302) one." + }, + "regex": { + "type": "string", + "description": "Regular expression matched against the incoming URL." + }, + "replacement": { + "type": "string", + "description": "Replacement URL, which may reference capture groups such as `${1}`." + } + }, + "requiredInputs": [ + "applicationId", + "regex", + "replacement" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Redirect resources.\n", + "properties": { + "applicationId": { + "type": "string", + "description": "Application this redirect belongs to." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the redirect was created." + }, + "permanent": { + "type": "boolean", + "description": "Issue a permanent (301) redirect instead of a temporary (302) one." + }, + "regex": { + "type": "string", + "description": "Regular expression matched against the incoming URL." + }, + "replacement": { + "type": "string", + "description": "Replacement URL, which may reference capture groups such as `${1}`." + } + }, + "type": "object" + } + }, + "dokploy:index/redis:Redis": { + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databasePassword": { + "type": "string", + "description": "Password used to authenticate to Redis.", + "secret": true + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "Redis image to run, for example `redis:7`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "required": [ + "appName", + "applicationStatus", + "args", + "createdAt", + "databasePassword", + "detachDokployNetwork", + "dockerImage", + "environmentId", + "name", + "networkIds", + "replicas" + ], + "inputProperties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "databasePassword": { + "type": "string", + "description": "Password used to authenticate to Redis.", + "secret": true + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "Redis image to run, for example `redis:7`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "requiredInputs": [ + "databasePassword", + "dockerImage", + "environmentId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Redis resources.\n", + "properties": { + "appName": { + "type": "string", + "description": "Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database." + }, + "applicationStatus": { + "type": "string", + "description": "Current status reported by Dokploy: \u003cspan pulumi-lang-nodejs=\"`idle`\" pulumi-lang-dotnet=\"`Idle`\" pulumi-lang-go=\"`idle`\" pulumi-lang-python=\"`idle`\" pulumi-lang-yaml=\"`idle`\" pulumi-lang-java=\"`idle`\" pulumi-lang-hcl=\"`idle`\"\u003e`idle`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`running`\" pulumi-lang-dotnet=\"`Running`\" pulumi-lang-go=\"`running`\" pulumi-lang-python=\"`running`\" pulumi-lang-yaml=\"`running`\" pulumi-lang-java=\"`running`\" pulumi-lang-hcl=\"`running`\"\u003e`running`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`done`\" pulumi-lang-dotnet=\"`Done`\" pulumi-lang-go=\"`done`\" pulumi-lang-python=\"`done`\" pulumi-lang-yaml=\"`done`\" pulumi-lang-java=\"`done`\" pulumi-lang-hcl=\"`done`\"\u003e`done`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`error`\" pulumi-lang-dotnet=\"`Error`\" pulumi-lang-go=\"`error`\" pulumi-lang-python=\"`error`\" pulumi-lang-yaml=\"`error`\" pulumi-lang-java=\"`error`\" pulumi-lang-hcl=\"`error`\"\u003e`error`\u003c/span\u003e." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments appended to the container command." + }, + "command": { + "type": "string", + "description": "Override the container entrypoint command." + }, + "cpuLimit": { + "type": "string", + "description": "Hard CPU limit, for example \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\" pulumi-lang-hcl=\"`1`\"\u003e`1`\u003c/span\u003e." + }, + "cpuReservation": { + "type": "string", + "description": "Soft CPU reservation, for example `0.5`." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the database was created." + }, + "databasePassword": { + "type": "string", + "description": "Password used to authenticate to Redis.", + "secret": true + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "detachDokployNetwork": { + "type": "boolean", + "description": "Detach the service from the shared `dokploy-network`." + }, + "dockerImage": { + "type": "string", + "description": "Redis image to run, for example `redis:7`." + }, + "endpointSpecSwarm": { + "type": "string", + "description": "Docker Swarm endpoint specification, as a JSON object." + }, + "env": { + "type": "string", + "description": "Environment variables in `KEY=value` format, one per line." + }, + "environmentId": { + "type": "string", + "description": "Environment this database belongs to." + }, + "externalPort": { + "type": "integer", + "description": "Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network." + }, + "healthCheckSwarm": { + "type": "string", + "description": "Docker Swarm health check configuration, as a JSON object." + }, + "labelsSwarm": { + "type": "string", + "description": "Docker Swarm service labels, as a JSON object." + }, + "memoryLimit": { + "type": "string", + "description": "Hard memory limit, for example \u003cspan pulumi-lang-nodejs=\"`512m`\" pulumi-lang-dotnet=\"`512m`\" pulumi-lang-go=\"`512m`\" pulumi-lang-python=\"`512m`\" pulumi-lang-yaml=\"`512m`\" pulumi-lang-java=\"`512m`\" pulumi-lang-hcl=\"`512m`\"\u003e`512m`\u003c/span\u003e." + }, + "memoryReservation": { + "type": "string", + "description": "Soft memory reservation, for example \u003cspan pulumi-lang-nodejs=\"`256m`\" pulumi-lang-dotnet=\"`256m`\" pulumi-lang-go=\"`256m`\" pulumi-lang-python=\"`256m`\" pulumi-lang-yaml=\"`256m`\" pulumi-lang-java=\"`256m`\" pulumi-lang-hcl=\"`256m`\"\u003e`256m`\u003c/span\u003e." + }, + "modeSwarm": { + "type": "string", + "description": "Docker Swarm service mode, as a JSON object." + }, + "name": { + "type": "string", + "description": "Display name of the database." + }, + "networkIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of additional Docker networks to attach." + }, + "networkSwarm": { + "type": "string", + "description": "Docker Swarm network attachments, as a JSON array." + }, + "placementSwarm": { + "type": "string", + "description": "Docker Swarm placement constraints, as a JSON object." + }, + "replicas": { + "type": "integer", + "description": "Number of replicas to run." + }, + "restartPolicySwarm": { + "type": "string", + "description": "Docker Swarm restart policy, as a JSON object." + }, + "rollbackConfigSwarm": { + "type": "string", + "description": "Docker Swarm rollback configuration, as a JSON object." + }, + "serverId": { + "type": "string", + "description": "Remote server to deploy on. Omit to use the Dokploy host itself." + }, + "stopGracePeriodSwarm": { + "type": "integer", + "description": "Grace period in nanoseconds before a container is killed." + }, + "ulimitsSwarm": { + "type": "string", + "description": "Docker Swarm ulimits, as a JSON object." + }, + "updateConfigSwarm": { + "type": "string", + "description": "Docker Swarm rolling update configuration, as a JSON object." + } + }, + "type": "object" + } + }, + "dokploy:index/registry:Registry": { + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the registry was created." + }, + "imagePrefix": { + "type": "string", + "description": "Prefix prepended to pushed image names, for example an organization or namespace." + }, + "password": { + "type": "string", + "description": "Password or access token used to authenticate.", + "secret": true + }, + "registryName": { + "type": "string", + "description": "Display name of the registry." + }, + "registryType": { + "type": "string", + "description": "Registry kind. Dokploy currently accepts only \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e. Valid values: \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e." + }, + "registryUrl": { + "type": "string", + "description": "Registry hostname, for example `ghcr.io`." + }, + "serverId": { + "type": "string", + "description": "Server this registry is scoped to." + }, + "username": { + "type": "string", + "description": "Username used to authenticate to the registry." + } + }, + "required": [ + "createdAt", + "password", + "registryName", + "registryType", + "registryUrl", + "username" + ], + "inputProperties": { + "imagePrefix": { + "type": "string", + "description": "Prefix prepended to pushed image names, for example an organization or namespace." + }, + "password": { + "type": "string", + "description": "Password or access token used to authenticate.", + "secret": true + }, + "registryName": { + "type": "string", + "description": "Display name of the registry." + }, + "registryType": { + "type": "string", + "description": "Registry kind. Dokploy currently accepts only \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e. Valid values: \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e." + }, + "registryUrl": { + "type": "string", + "description": "Registry hostname, for example `ghcr.io`." + }, + "serverId": { + "type": "string", + "description": "Server this registry is scoped to." + }, + "username": { + "type": "string", + "description": "Username used to authenticate to the registry." + } + }, + "requiredInputs": [ + "password", + "registryName", + "registryUrl", + "username" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Registry resources.\n", + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the registry was created." + }, + "imagePrefix": { + "type": "string", + "description": "Prefix prepended to pushed image names, for example an organization or namespace." + }, + "password": { + "type": "string", + "description": "Password or access token used to authenticate.", + "secret": true + }, + "registryName": { + "type": "string", + "description": "Display name of the registry." + }, + "registryType": { + "type": "string", + "description": "Registry kind. Dokploy currently accepts only \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e. Valid values: \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`cloud`\" pulumi-lang-dotnet=\"`Cloud`\" pulumi-lang-go=\"`cloud`\" pulumi-lang-python=\"`cloud`\" pulumi-lang-yaml=\"`cloud`\" pulumi-lang-java=\"`cloud`\" pulumi-lang-hcl=\"`cloud`\"\u003e`cloud`\u003c/span\u003e." + }, + "registryUrl": { + "type": "string", + "description": "Registry hostname, for example `ghcr.io`." + }, + "serverId": { + "type": "string", + "description": "Server this registry is scoped to." + }, + "username": { + "type": "string", + "description": "Username used to authenticate to the registry." + } + }, + "type": "object" + } + }, + "dokploy:index/security:Security": { + "properties": { + "applicationId": { + "type": "string", + "description": "Application these credentials protect." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the credentials were created." + }, + "password": { + "type": "string", + "description": "Basic auth password.", + "secret": true + }, + "username": { + "type": "string", + "description": "Basic auth username." + } + }, + "required": [ + "applicationId", + "createdAt", + "password", + "username" + ], + "inputProperties": { + "applicationId": { + "type": "string", + "description": "Application these credentials protect." + }, + "password": { + "type": "string", + "description": "Basic auth password.", + "secret": true + }, + "username": { + "type": "string", + "description": "Basic auth username." + } + }, + "requiredInputs": [ + "applicationId", + "password", + "username" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Security resources.\n", + "properties": { + "applicationId": { + "type": "string", + "description": "Application these credentials protect." + }, + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the credentials were created." + }, + "password": { + "type": "string", + "description": "Basic auth password.", + "secret": true + }, + "username": { + "type": "string", + "description": "Basic auth username." + } + }, + "type": "object" + } + }, + "dokploy:index/sshKey:SshKey": { + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the key was created." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "lastUsedAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the key was last used, if ever." + }, + "name": { + "type": "string", + "description": "Display name of the key pair." + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded private key.", + "secret": true + }, + "publicKey": { + "type": "string", + "description": "OpenSSH-formatted public key." + } + }, + "required": [ + "createdAt", + "lastUsedAt", + "name", + "privateKey", + "publicKey" + ], + "inputProperties": { + "description": { + "type": "string", + "description": "Free-form description." + }, + "name": { + "type": "string", + "description": "Display name of the key pair." + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded private key.", + "secret": true + }, + "publicKey": { + "type": "string", + "description": "OpenSSH-formatted public key." + } + }, + "requiredInputs": [ + "privateKey", + "publicKey" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering SshKey resources.\n", + "properties": { + "createdAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the key was created." + }, + "description": { + "type": "string", + "description": "Free-form description." + }, + "lastUsedAt": { + "type": "string", + "description": "RFC 3339 timestamp of when the key was last used, if ever." + }, + "name": { + "type": "string", + "description": "Display name of the key pair." + }, + "privateKey": { + "type": "string", + "description": "PEM-encoded private key.", + "secret": true + }, + "publicKey": { + "type": "string", + "description": "OpenSSH-formatted public key." + } + }, + "type": "object" + } + } + }, + "functions": { + "dokploy:index/getApplication:getApplication": { + "inputs": { + "description": "A collection of arguments for invoking getApplication.\n", + "properties": { + "id": { + "type": "string" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getApplication.\n", + "properties": { + "appName": { + "type": "string" + }, + "applicationStatus": { + "type": "string" + }, + "buildType": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sourceType": { + "type": "string" + } + }, + "required": [ + "appName", + "applicationStatus", + "buildType", + "createdAt", + "description", + "environmentId", + "id", + "name", + "sourceType" + ], + "type": "object" + } + }, + "dokploy:index/getEnvironment:getEnvironment": { + "inputs": { + "description": "A collection of arguments for invoking getEnvironment.\n", + "properties": { + "id": { + "type": "string" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getEnvironment.\n", + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "env": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "createdAt", + "description", + "env", + "id", + "isDefault", + "name", + "projectId" + ], + "type": "object" + } + }, + "dokploy:index/getProject:getProject": { + "inputs": { + "description": "A collection of arguments for invoking getProject.\n", + "properties": { + "id": { + "type": "string" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getProject.\n", + "properties": { + "createdAt": { + "type": "string" + }, + "defaultEnvironmentId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "env": { + "type": "string" + }, + "environments": { + "items": { + "$ref": "#/types/dokploy:index/getProjectEnvironment:getProjectEnvironment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "createdAt", + "defaultEnvironmentId", + "description", + "env", + "environments", + "id", + "name", + "organizationId" + ], + "type": "object" + } + }, + "dokploy:index/getProjects:getProjects": { + "outputs": { + "description": "A collection of values returned by getProjects.\n", + "properties": { + "projects": { + "items": { + "$ref": "#/types/dokploy:index/getProjectsProject:getProjectsProject" + }, + "type": "array" + } + }, + "required": [ + "projects" + ], + "type": "object" + } + }, + "dokploy:index/getServers:getServers": { + "outputs": { + "description": "A collection of values returned by getServers.\n", + "properties": { + "servers": { + "items": { + "$ref": "#/types/dokploy:index/getServersServer:getServersServer" + }, + "type": "array" + } + }, + "required": [ + "servers" + ], + "type": "object" + } + }, + "pulumi:providers:dokploy/terraformConfig": { + "description": "This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.", + "inputs": { + "properties": { + "__self__": { + "type": "ref", + "$ref": "#/provider" + } + }, + "type": "pulumi:providers:dokploy/terraformConfig", + "required": [ + "__self__" + ] + }, + "outputs": { + "properties": { + "result": { + "additionalProperties": { + "$ref": "pulumi.json#/Any" + }, + "type": "object" + } + }, + "required": [ + "result" + ], + "type": "object" + } + } + } +} \ No newline at end of file diff --git a/provider/cmd/pulumi-tfgen-dokploy/main.go b/provider/cmd/pulumi-tfgen-dokploy/main.go new file mode 100644 index 0000000..1fc51b8 --- /dev/null +++ b/provider/cmd/pulumi-tfgen-dokploy/main.go @@ -0,0 +1,14 @@ +// pulumi-tfgen-dokploy generates the Pulumi package schema and language SDKs +// from the bridged Dokploy Terraform provider. +package main + +import ( + "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/pf/tfgen" + + dokploy "github.com/maxvojtkov/pulumi-dokploy/provider" + "github.com/maxvojtkov/pulumi-dokploy/provider/pkg/version" +) + +func main() { + tfgen.Main("dokploy", dokploy.Provider(version.Version)) +} diff --git a/provider/go.mod b/provider/go.mod new file mode 100644 index 0000000..5f9908f --- /dev/null +++ b/provider/go.mod @@ -0,0 +1,241 @@ +module github.com/maxvojtkov/pulumi-dokploy/provider + +go 1.25.11 + +require ( + github.com/maxvojtkov/terraform-provider-dokploy v0.0.0 + github.com/pulumi/pulumi-terraform-bridge/v3 v3.136.0 +) + +require ( + cel.dev/expr v0.25.2 // indirect + cloud.google.com/go v0.123.0 // indirect + cloud.google.com/go/auth v0.20.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.9.0 // indirect + cloud.google.com/go/iam v1.11.0 // indirect + cloud.google.com/go/monitoring v1.29.0 // indirect + cloud.google.com/go/storage v1.62.2 // indirect + github.com/BurntSushi/toml v1.6.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/semver/v3 v3.2.0 // indirect + github.com/Masterminds/sprig/v3 v3.2.3 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProtonMail/go-crypto v1.4.1 // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-cidr v1.1.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/armon/go-radix v1.0.0 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.11 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.12 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.21 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.20 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.27 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.27 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.27 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.19 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.26 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.26 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.103.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.1.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.31.0 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.3 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.43.0 // indirect + github.com/aws/smithy-go v1.27.0 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/charmbracelet/bubbles v1.0.0 // indirect + github.com/charmbracelet/bubbletea v1.3.10 // indirect + github.com/charmbracelet/colorprofile v0.4.3 // indirect + github.com/charmbracelet/lipgloss v1.1.0 // indirect + github.com/charmbracelet/x/ansi v0.11.7 // indirect + github.com/charmbracelet/x/cellbuf v0.0.15 // indirect + github.com/charmbracelet/x/term v0.2.2 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/clipperhouse/displaywidth v0.11.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect + github.com/cloudflare/circl v1.6.3 // indirect + github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect + github.com/deckarep/golang-set/v2 v2.5.0 // indirect + github.com/djherbis/times v1.6.0 // indirect + github.com/edsrzf/mmap-go v1.1.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-git/gcfg/v2 v2.0.2 // indirect + github.com/go-git/go-billy/v6 v6.0.0-alpha.1 // indirect + github.com/go-git/go-git/v6 v6.0.0-alpha.4 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect + github.com/go-logr/logr v1.4.4 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.5 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.16 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-cty v1.5.0 // indirect + github.com/hashicorp/go-getter v1.8.6 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-plugin v1.8.0 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/hashicorp/go-version v1.9.0 // indirect + github.com/hashicorp/hcl v1.0.1-vault-7 // indirect + github.com/hashicorp/hcl/v2 v2.24.0 // indirect + github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 // indirect + github.com/hashicorp/logutils v1.0.0 // indirect + github.com/hashicorp/terraform-plugin-framework v1.19.0 // indirect + github.com/hashicorp/terraform-plugin-framework-jsontypes v0.2.0 // indirect + github.com/hashicorp/terraform-plugin-framework-validators v0.18.0 // indirect + github.com/hashicorp/terraform-plugin-go v0.31.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.10.0 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.40.1 // indirect + github.com/hashicorp/terraform-registry-address v0.4.0 // indirect + github.com/hashicorp/terraform-svchost v0.2.1 // indirect + github.com/hashicorp/yamux v0.1.2 // indirect + github.com/huandu/xstrings v1.3.3 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/imdario/mergo v0.3.15 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kevinburke/ssh_config v1.6.0 // indirect + github.com/klauspost/compress v1.18.7 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/lucasb-eyer/go-colorful v1.4.1 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.27 // indirect + github.com/mitchellh/cli v1.1.5 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/mitchellh/hashstructure v1.0.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/termenv v0.16.0 // indirect + github.com/natefinch/atomic v1.0.1 // indirect + github.com/oklog/run v1.2.0 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect + github.com/olekukonko/errors v1.1.0 // indirect + github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0 // indirect + github.com/olekukonko/tablewriter v1.1.3 // indirect + github.com/opentofu/registry-address/v2 v2.0.0-20250611143131-d0a99bd8acdd // indirect + github.com/opentofu/svchost v0.0.0-20250610175836-86c9e5e3d8c8 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/fx v0.1.6 // indirect + github.com/pgavlin/fx/v2 v2.0.12 // indirect + github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect + github.com/pjbgf/sha1cd v0.6.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/posener/complete v1.2.3 // indirect + github.com/pulumi-labs/pulumi-hcl v0.3.1 // indirect + github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect + github.com/pulumi/inflector v0.2.1 // indirect + github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.110.0 // indirect + github.com/pulumi/pulumi-java v1.34.0 // indirect + github.com/pulumi/pulumi-yaml v1.38.1 // indirect + github.com/pulumi/pulumi/pkg/v3 v3.256.0 // indirect + github.com/pulumi/pulumi/sdk/v3 v3.256.0 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect + github.com/segmentio/asm v1.1.3 // indirect + github.com/segmentio/encoding v0.3.6 // indirect + github.com/sergi/go-diff v1.4.0 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.10.2 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/spiffe/go-spiffe/v2 v2.7.0 // indirect + github.com/teekennedy/goldmark-markdown v0.3.0 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/ulikunitz/xz v0.5.15 // indirect + github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect + github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/yuin/goldmark v1.7.17 // indirect + github.com/zclconf/go-cty v1.18.1 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/collector/featuregate v1.64.0 // indirect + go.opentelemetry.io/collector/pdata v1.64.0 // indirect + go.opentelemetry.io/contrib/bridges/otelslog v0.20.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.44.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect + go.opentelemetry.io/otel v1.45.0 // indirect + go.opentelemetry.io/otel/bridge/opentracing v1.33.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.21.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.45.0 // indirect + go.opentelemetry.io/otel/log v0.21.0 // indirect + go.opentelemetry.io/otel/metric v1.45.0 // indirect + go.opentelemetry.io/otel/sdk v1.45.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.21.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.45.0 // indirect + go.opentelemetry.io/otel/trace v1.45.0 // indirect + go.opentelemetry.io/proto/otlp v1.11.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.54.0 // indirect + golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/oauth2 v0.36.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/term v0.45.0 // indirect + golang.org/x/text v0.40.0 // indirect + golang.org/x/time v0.15.0 // indirect + golang.org/x/tools v0.47.0 // indirect + google.golang.org/api v0.283.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d // indirect + google.golang.org/grpc v1.83.0 // indirect + google.golang.org/protobuf v1.36.11 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.5.1 // indirect +) + +// The Terraform provider is developed alongside this repo. Replace with a +// tagged version once terraform-provider-dokploy is published. +replace github.com/maxvojtkov/terraform-provider-dokploy => ../../dokploy-teraform diff --git a/provider/go.sum b/provider/go.sum new file mode 100644 index 0000000..af93489 --- /dev/null +++ b/provider/go.sum @@ -0,0 +1,765 @@ +cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= +cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= +cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= +cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= +cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= +cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/kms v1.31.0 h1:LS8N92OxFDgOLg5NCo3OmbvjtQAIVT5gUHVLKIDHaFE= +cloud.google.com/go/kms v1.31.0/go.mod h1:YIyXZym11R5uovJJt4oN5eUL3oPmirF3yKeIh6QAf4U= +cloud.google.com/go/logging v1.18.0 h1:KhzZq+1cSkPH9YUaKLLhLtQxIHitVayBmk0sGfoM9+k= +cloud.google.com/go/logging v1.18.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMhRVVdY= +cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= +cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/storage v1.62.2 h1:WgR4U9n7bIzXkkVnwPKKE8bkaKUNsHG+0MAAlh9DGU4= +cloud.google.com/go/storage v1.62.2/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= +cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 h1:jHb/wfvRikGdxMXYV3QG/SzUOPYN9KEUUuC0Yd0/vC0= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1/go.mod h1:pzBXCYn05zvYIrwLgtK8Ap8QcjRg+0i76tMQdWN6wOk= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 h1:fhqpLE3UEXi9lPaBRpQ6XuRW0nU7hgg4zlmZZa+a9q4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0/go.mod h1:7dCRMLwisfRH3dBupKeNCioWYUZ4SS09Z14H+7i8ZoY= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.5.0 h1:MaKvxE6D0KkjOg6Wd9M00iqP5PR0kUxCfiezes4JweM= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.5.0/go.mod h1:i2h9fsTFKZorh8RdV2IcSUf/Qj98GlTkrTvUbX/s8as= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 h1:nCYfgcSyHZXJI8J0IWE5MsCGlb2xp9fJiXyxWgmOFg4= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0/go.mod h1:ucUjca2JtSZboY8IoUqyQyuuXvwbMBVwFOm0vdQPNhA= +github.com/AzureAD/microsoft-authentication-library-for-go v1.7.2 h1:RHK7bS+HQMslb1sZpAokUt+zTVmue0hKSs2C791hhzU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.7.2/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 h1:l7+6kwRMJNwdCvYdDl7Eax+wzEYHSnNY7zrrfbhDdTA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0 h1:ZIT85vKP7LBS84XJ0WdJ3dPOX3iz4j3c0+lpajGQMyo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= +github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= +github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.4.1 h1:9RfcZHqEQUvP8RzecWEUafnZVtEvrBVL9BiF67IQOfM= +github.com/ProtonMail/go-crypto v1.4.1/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= +github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= +github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go-v2 v1.41.11 h1:9PRf7jyTMEUM6fuNRAJa2mO/skJfrF50rENJwf2LXqw= +github.com/aws/aws-sdk-go-v2 v1.41.11/go.mod h1:iiUX27gOXRuYaoeUVXhUpPwjJHzISfPAjjcuhUbLSVs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.12 h1:oRtsqWgxbpeXrOlxOoQStx2M9WNbIkPq4C4Xn1or6bc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.12/go.mod h1:Zg0Oe9qT+9wcezlm1a64wGJp2qZdRElVxo/seJf7jYU= +github.com/aws/aws-sdk-go-v2/config v1.32.21 h1:1i1v5jWn6iNPl7zkH4VwIXQOb+OMqMRFNjdHQeZbFVo= +github.com/aws/aws-sdk-go-v2/config v1.32.21/go.mod h1:7NXDJjk0e4QOMv3Y3ppwALx3ifdSQHzCACFtRX5J1hI= +github.com/aws/aws-sdk-go-v2/credentials v1.19.20 h1:nIGz0+cQKwijxSsWNpggvPxjxFMtrAHNj16RYzGbu2Q= +github.com/aws/aws-sdk-go-v2/credentials v1.19.20/go.mod h1:/UQHYia3DSeilGdchXJDEVzJws15XuZSdnTlwbTBg0Q= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.26 h1:a1VPHz7eG7mVNHWHXUcCyC8rQDBEr4k+o4HJYbSoYZ0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.26/go.mod h1:9G8LPblMwaodeQdS+IfDBgPqABDctJLpyZ/M6jflE6s= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.27 h1:8sPbKi1/KRHwl5oR3qN9mUXestCeHuaRutxylnr/eVY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.27/go.mod h1:QV9IVIopJ1dpQUno0f9VYDUwOEjj8u0iEJ4JiZVre3Y= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.27 h1:9d8AoASQY9UwrOSmiJ7uSM0MGUPFhnenwSvpaFfat2c= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.27/go.mod h1:x0rldpsnUQaQIs4Rh+Vwm9Z/0vI6BxadGtsgJfZFb8s= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.27 h1:i49S7g2smFWmlconi97Nn8dxb7jSQ0TeOFD20NX3M+o= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.27/go.mod h1:qiLes3uVQAK+cpb837HUEhypYKGBz2ZCDcDl5BYQtpM= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.74.4 h1:4GBRq2ZWJkOy6S4HRNuJJpaZ5KXPNIDe/QJysoyXglI= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.74.4/go.mod h1:Op4lD9kBH1InUC+DxIALi0ALAASdpY71vRdtevYFVrs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10 h1:d5/908OJ4bXg8lyjeMPvXetEKqoDoLi5Owy1zNue3yg= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10/go.mod h1:a57l7Hwh+FWI+we50g5NPJHYUKeJKfXbc4w8SyXu8Ig= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.19 h1:q/Kqqr7Jz4IKSHbFhsCwm5Q4WU7NUTY9tc4nHuBg7pg= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.19/go.mod h1:kTMPExiQ8IW43fOffpm0npgLopHXzTxZ/1CnB2c8c0E= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.26 h1:oIRaBVJ2CxT7T61l3JkBCW/rnyh2TFZIRL71MvJTKRI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.26/go.mod h1:1gCTZPMlqAUSFoFbkl35hKtTpE96WFl7ORvDXmSLpRc= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.26 h1:eiwOPA7MW2LZzSfULHOFWdekrv59pEpDckN37IiK1EM= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.26/go.mod h1:qM4B4ioTSHmkcKKhyoQMc3fcgl+d4mgqdJGzBJApYy0= +github.com/aws/aws-sdk-go-v2/service/kms v1.53.1 h1:ZG4esUs5NrDr6lwKDZLE+746tq7nxS8PacNfHA9mOjk= +github.com/aws/aws-sdk-go-v2/service/kms v1.53.1/go.mod h1:f8U49SXXH38WX8B1oFXG8igfV+MZ5mgM9b/trTlBf2E= +github.com/aws/aws-sdk-go-v2/service/s3 v1.103.0 h1:BmOawMUDBUiFAMgk8zTp3w5iei2Vh5j4mwIHTXOuGTc= +github.com/aws/aws-sdk-go-v2/service/s3 v1.103.0/go.mod h1:pivHPRqURZdlzSlGmULol6xBEoy7hHmWW/pIfAkc8Tw= +github.com/aws/aws-sdk-go-v2/service/signin v1.1.2 h1:qwU4CNor4G2gRW3Na24FWOCZSEvr967IAV3D+MXxdE0= +github.com/aws/aws-sdk-go-v2/service/signin v1.1.2/go.mod h1:vwIj2P3URYf7ZtOQkO2iVbAaR8qFhqMv05w3aPPA5XA= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.0 h1:cMDUWhi7vlmGFj6rldHofjnAQhLLBWwRvNRbtEoyZo4= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.0/go.mod h1:VfGCm6HLUGwcouY6zjQJd81PoFsb8sfSmKd5QCg9XXc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.3 h1:/pKy3mNES+ppFHf3g/XmI95+f3vdeXnkWYObByoYGAg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.3/go.mod h1:0z2rhlVAjsYeBzV8fdT4jR23Nq+fYhoJNSJN+4SBlqM= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.0 h1:HN43uYvF8D2NtaPTeE4L3HMvXgd+RtqEqrea4uUztkM= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.0/go.mod h1:qzhDlfw1BRYyoNofevemNzrlRpUXa0BJamWx7klrR8w= +github.com/aws/smithy-go v1.27.0 h1:ZoFioDKJxkSIW2otF9T0aPtNlUwhdVCcuZh/rzH9Hus= +github.com/aws/smithy-go v1.27.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/bazelbuild/buildtools v0.0.0-20260211083412-859bfffeef82 h1:PmoVmwzAnGb0iCjulb7Mgsaqw2Wj36LQJ8VyYaFe/ak= +github.com/bazelbuild/buildtools v0.0.0-20260211083412-859bfffeef82/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= +github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc= +github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E= +github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= +github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= +github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q= +github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI= +github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= +github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI= +github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q= +github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= +github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= +github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= +github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= +github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJzQ7y/sA= +github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= +github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= +github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= +github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= +github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= +github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= +github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/git-pkgs/manifests v0.4.1 h1:CWml+TrRXVzrfNJ2pTNKLqyi+9y/BFiQP/BX3pL4pPQ= +github.com/git-pkgs/manifests v0.4.1/go.mod h1:7SPFwU9diUG1Az682/p4ZupHJkfpbWKwRvNPwCcOeVs= +github.com/git-pkgs/packageurl-go v0.3.1 h1:WM3RBABQZLaRBxgKyYughc3cVBE8KyQxbSC6Jt5ak7M= +github.com/git-pkgs/packageurl-go v0.3.1/go.mod h1:rcIxiG37BlQLB6FZfgdj9Fm7yjhRQd3l+5o7J0QPAk4= +github.com/git-pkgs/purl v0.1.10 h1:NMjeF10nzFn3tdQlz6rbmHB+i+YkyrFQxho3e33ePTQ= +github.com/git-pkgs/purl v0.1.10/go.mod h1:C5Vp/kyZ/wGckCLexx4wPVfUxEiToRkdsOPh5Z7ig/I= +github.com/git-pkgs/vers v0.2.4 h1:Zr3jR/Xf1i/6cvBaJKPxhCwjzqz7uvYHE0Fhid/GPBk= +github.com/git-pkgs/vers v0.2.4/go.mod h1:biTbSQK1qdbrsxDEKnqe3Jzclxz8vW6uDcwKjfUGcOo= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= +github.com/go-git/gcfg/v2 v2.0.2 h1:MY5SIIfTGGEMhdA7d7JePuVVxtKL7Hp+ApGDJAJ7dpo= +github.com/go-git/gcfg/v2 v2.0.2/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs= +github.com/go-git/go-billy/v6 v6.0.0-alpha.1 h1:xVjAR4oUvrKy7/Xuw/lLlV3gkxR3KO2H8W+MamuVVsQ= +github.com/go-git/go-billy/v6 v6.0.0-alpha.1/go.mod h1:eaCUpHbedW7//EwcYmUDfJe2N6sJC9O12AT0OTqJR1E= +github.com/go-git/go-git-fixtures/v6 v6.0.0-alpha.1 h1:gmqi2jvsreu0s8JMLylYDFq4sbjHwwlhktMw0DUg3mA= +github.com/go-git/go-git-fixtures/v6 v6.0.0-alpha.1/go.mod h1:ECf1MqJlBdYpKggBrOXjo/0EnvRZx6D++I86UYjPgAQ= +github.com/go-git/go-git/v6 v6.0.0-alpha.4 h1:aDTc2UGanmaE7FkGLSlBEB9nohMnQ+RKXcfq/D+esDQ= +github.com/go-git/go-git/v6 v6.0.0-alpha.4/go.mod h1:4ODa/G7hPWrh4Y+7lmt59Ij3zW38IEfvRoAZxLYYBhc= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= +github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= +github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4= +github.com/google/wire v0.7.0/go.mod h1:n6YbUQD9cPKTnHXEBN2DXlOp/mVADhVErcMFb0v3J18= +github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw= +github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= +github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-cty v1.5.0 h1:EkQ/v+dDNUqnuVpmS5fPqyY71NXVgT5gf32+57xY8g0= +github.com/hashicorp/go-cty v1.5.0/go.mod h1:lFUCG5kd8exDobgSfyj4ONE/dc822kiYMguVKdHGMLM= +github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= +github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-plugin v1.8.0 h1:ie8S6RRY8RvB2usYZv+AAZ/wBvx2AU5p5QeP5j/FORs= +github.com/hashicorp/go-plugin v1.8.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= +github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= +github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 h1:U+kC2dOhMFQctRfhK0gRctKAPTloZdMU5ZJxaesJ/VM= +github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0/go.mod h1:Ll013mhdmsVDuoIXVfBtvgGJsXDYkTw1kooNcoCXuE0= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw= +github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= +github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/hc-install v0.9.4 h1:KKWOpUG0EqIV63Qk2GGFrZ0s275NVs5lKf9N5vjBNoc= +github.com/hashicorp/hc-install v0.9.4/go.mod h1:4LRYeEN2bMIFfIv57ldMWt9awfuZhvpbRt0vWmv51WU= +github.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y6xGI0I= +github.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= +github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= +github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= +github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 h1:T1Q6ag9tCwun16AW+XK3tAql24P4uTGUMIn1/92WsQQ= +github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/terraform-exec v0.25.1 h1:PRutYRGM8pixV3B8812NYoBK5O+yuf3qcB/70KFKGiU= +github.com/hashicorp/terraform-exec v0.25.1/go.mod h1:+izOYrs9sKMQK4OYvGDnrSSJHY/pm4e4eXFqSL2Q5mA= +github.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU= +github.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE= +github.com/hashicorp/terraform-plugin-framework v1.19.0 h1:q0bwyhxAOR3vfdgbk9iplv3MlTv/dhBHTXjQOtQDoBA= +github.com/hashicorp/terraform-plugin-framework v1.19.0/go.mod h1:YRXOBu0jvs7xp4AThBbX4mAzYaMJ1JgtFH//oGKxwLc= +github.com/hashicorp/terraform-plugin-framework-jsontypes v0.2.0 h1:SJXL5FfJJm17554Kpt9jFXngdM6fXbnUnZ6iT2IeiYA= +github.com/hashicorp/terraform-plugin-framework-jsontypes v0.2.0/go.mod h1:p0phD0IYhsu9bR4+6OetVvvH59I6LwjXGnTVEr8ox6E= +github.com/hashicorp/terraform-plugin-framework-validators v0.18.0 h1:OQnlOt98ua//rCw+QhBbSqfW3QbwtVrcdWeQN5gI3Hw= +github.com/hashicorp/terraform-plugin-framework-validators v0.18.0/go.mod h1:lZvZvagw5hsJwuY7mAY6KUz45/U6fiDR0CzQAwWD0CA= +github.com/hashicorp/terraform-plugin-go v0.31.0 h1:0Fz2r9DQ+kNNl6bx8HRxFd1TfMKUvnrOtvJPmp3Z0q8= +github.com/hashicorp/terraform-plugin-go v0.31.0/go.mod h1:A88bDhd/cW7FnwqxQRz3slT+QY6yzbHKc6AOTtmdeS8= +github.com/hashicorp/terraform-plugin-log v0.10.0 h1:eu2kW6/QBVdN4P3Ju2WiB2W3ObjkAsyfBsL3Wh1fj3g= +github.com/hashicorp/terraform-plugin-log v0.10.0/go.mod h1:/9RR5Cv2aAbrqcTSdNmY1NRHP4E3ekrXRGjqORpXyB0= +github.com/hashicorp/terraform-plugin-sdk v1.7.0 h1:B//oq0ZORG+EkVrIJy0uPGSonvmXqxSzXe8+GhknoW0= +github.com/hashicorp/terraform-plugin-sdk v1.7.0/go.mod h1:OjgQmey5VxnPej/buEhe+YqKm0KNvV3QqU4hkqHqPCY= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.40.1 h1:2yPUd7esMOpuTaG3y1iEla1iw+tla+3ZEkkBnmOAre4= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.40.1/go.mod h1:sq8qsxh+PwdvTQFcd17kfCoBgQo46ADNMvCpKE7t/gY= +github.com/hashicorp/terraform-plugin-testing v1.16.0 h1:GB97nGnJ1hESpDrCjqZig38RodSF0gdRzxlDupLXP38= +github.com/hashicorp/terraform-plugin-testing v1.16.0/go.mod h1:eQPYAy9xFMV7xtIFX8Y+wJGtUB++HBl329zCF6PBMZk= +github.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk= +github.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE= +github.com/hashicorp/terraform-svchost v0.2.1 h1:ubvrTFw3Q7CsoEaX7V06PtCTKG3wu7GyyobAoN4eF3Q= +github.com/hashicorp/terraform-svchost v0.2.1/go.mod h1:zDMheBLvNzu7Q6o9TBvPqiZToJcSuCLXjAXxBslSky4= +github.com/hashicorp/vault/api v1.22.0 h1:+HYFquE35/B74fHoIeXlZIP2YADVboaPjaSicHEZiH0= +github.com/hashicorp/vault/api v1.22.0/go.mod h1:IUZA2cDvr4Ok3+NtK2Oq/r+lJeXkeCrHRmqdyWfpmGM= +github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= +github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= +github.com/hexops/autogold v1.3.0 h1:IEtGNPxBeBu8RMn8eKWh/Ll9dVNgSnJ7bp/qHgMQ14o= +github.com/hexops/autogold v1.3.0/go.mod h1:d4hwi2rid66Sag+BVuHgwakW/EmaFr8vdTSbWDbrDRI= +github.com/hexops/autogold/v2 v2.3.1 h1:GcDwp9TkPkDG/wVodudePKPG8HbvEA8o8Z9hySIuAC4= +github.com/hexops/autogold/v2 v2.3.1/go.mod h1:1vQ1sj0yXQNn8VOlQeefQPXTLr9Qy9cf8pMDanZ4Gmo= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/hexops/valast v1.5.0 h1:FBTuvVi0wjTngtXJRZXMbkN/Dn6DgsUsBwch2DUJU8Y= +github.com/hexops/valast v1.5.0/go.mod h1:Jcy1pNH7LNraVaAZDLyv21hHg2WBv9Nf9FL6fGxU7o4= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= +github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= +github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kevinburke/ssh_config v1.6.0 h1:J1FBfmuVosPHf5GRdltRLhPJtJpTlMdKTBjRgTaQBFY= +github.com/kevinburke/ssh_config v1.6.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.18.7 h1:aUyZsS4kH3QTKurYhAOwAHxllVPnOthb3vPfnF1Ehjw= +github.com/klauspost/compress v1.18.7/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lucasb-eyer/go-colorful v1.4.1 h1:1EO+WB73+EH8EVbzlrG3KLAfEypQWVHIBqlTf+2hNss= +github.com/lucasb-eyer/go-colorful v1.4.1/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.27 h1:Feg/Oou5zI/wnpgDF6omIU0OokC9GxLC/WRknhVlIR0= +github.com/mattn/go-runewidth v0.0.27/go.mod h1:3qAiGCV4Koz/yuveO58qUefmUTRm8r0IGEXZ9jeHp/8= +github.com/mitchellh/cli v1.1.5 h1:OxRIeJXpAMztws/XHlN2vu6imG5Dpq+j61AzAX5fLng= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= +github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= +github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= +github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI= +github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= +github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0 h1:jrYnow5+hy3WRDCBypUFvVKNSPPCdqgSXIE9eJDD8LM= +github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA= +github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM= +github.com/opentofu/registry-address/v2 v2.0.0-20250611143131-d0a99bd8acdd h1:YAAnzmyOoMvm5SuGXL4hhlfBgqz92XDfORGPV3kmQFc= +github.com/opentofu/registry-address/v2 v2.0.0-20250611143131-d0a99bd8acdd/go.mod h1:7M92SvuJm1WBriIpa4j0XmruU9pxkgPXmRdc6FfAvAk= +github.com/opentofu/svchost v0.0.0-20250610175836-86c9e5e3d8c8 h1:J3pmsVB+nGdfNp5HWdEAC96asYgc7S6J724ICrYDCTk= +github.com/opentofu/svchost v0.0.0-20250610175836-86c9e5e3d8c8/go.mod h1:0kKTcD9hUrbAz41GWp8USa/+OuI8QKirU3qdCWNa3jI= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= +github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= +github.com/pgavlin/fx/v2 v2.0.12 h1:SjjaJ68Dt8Z4zHwOpY/RPijd7lShs6xYupJbF9ra00M= +github.com/pgavlin/fx/v2 v2.0.12/go.mod h1:M/nF/ooAOy+NUBooYYXl2REARzJ/giPJxfMs8fINfKc= +github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 h1:LoCV5cscNVWyK5ChN/uCoIFJz8jZD63VQiGJIRgr6uo= +github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386/go.mod h1:MRxHTJrf9FhdfNQ8Hdeh9gmHevC9RJE/fu8M3JIGjoE= +github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU= +github.com/pjbgf/sha1cd v0.6.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/pulumi-labs/pulumi-hcl v0.3.1 h1:Fp8Nc/owglgUqVPodZ4ZFxUuyydiYUXqtLMhmuIOX8U= +github.com/pulumi-labs/pulumi-hcl v0.3.1/go.mod h1:DQS4ZHIFxV4mzVd0By5WohxbonVRKWhlAhXIkMAeQK0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= +github.com/pulumi/inflector v0.2.1 h1:bqyiish3tq//vLeLiEstSFE5K7RNjy/ce47ed4QATu8= +github.com/pulumi/inflector v0.2.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY= +github.com/pulumi/providertest v0.7.0 h1:nXydemrnkJfil6sd8AtvO81gJOTzYc1wFfgtco4zWDc= +github.com/pulumi/providertest v0.7.0/go.mod h1:R7nigJF1sE3yUtNQSozNSfsUl/gK4xIDW0Mxmacl6IY= +github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.110.0 h1:3ZVrcJAP3ho1YSYT2n/UqlKBEjGY4ePfmjknjHXAXi0= +github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.110.0/go.mod h1:sZ26/AWTq2jYFcc26sTFK+1mKiGsOETeFltYqpBN7E4= +github.com/pulumi/pulumi-java v1.34.0 h1:UiwcJfvb8dFu90Ey50Q+gCRQGiczfaX4n9e63VkEwBU= +github.com/pulumi/pulumi-java v1.34.0/go.mod h1:/tqIv+dbepDGuaGtlEOFb83Fgko4uE783VeGN7BVeg8= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.136.0 h1:MB+m/Rg1NKCAcxICoDR0nAE7SzjE7W7NnBBSOZouwc4= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.136.0/go.mod h1:XOQPUACb9ZTlly/7t7w4r2VnanhjnhlgZJOvMxfeTU0= +github.com/pulumi/pulumi-yaml v1.38.1 h1:FquTa8vjvKXreiBHDmuUD9jaZc5y0WXYvRYey+Wrzd4= +github.com/pulumi/pulumi-yaml v1.38.1/go.mod h1:Vh0fhfZGckj1Bqwdcr3buXjAP+VsseEuPjRl+SsOMdo= +github.com/pulumi/pulumi/pkg/v3 v3.256.0 h1:uXTo11w2S5scowuuv6Z5yMzxz9NmpYnogNBCeCUziWc= +github.com/pulumi/pulumi/pkg/v3 v3.256.0/go.mod h1:FdxtC8Mia2ZjO80xPOTNKusgF8Ae16GQe2LqhXv8pNw= +github.com/pulumi/pulumi/sdk/v3 v3.256.0 h1:OrkIu7Iw3HUcMtoEy2uzpD21C32B5EYBLBgBoh/uQPM= +github.com/pulumi/pulumi/sdk/v3 v3.256.0/go.mod h1:pyX/FL1Ta3mn4UPfYh2LKG+q/90i2+Jnl0OX4cS+b9U= +github.com/pulumi/terraform-diff-reader v0.0.2 h1:kTE4nEXU3/SYXESvAIem+wyHMI3abqkI3OhJ0G04LLI= +github.com/pulumi/terraform-diff-reader v0.0.2/go.mod h1:sZ9FUzGO+yM41hsQHs/yIcj/Y993qMdBxBU5mpDmAfQ= +github.com/rhysd/go-fakeio v1.0.0 h1:+TjiKCOs32dONY7DaoVz/VPOdvRkPfBkEyUDIpM8FQY= +github.com/rhysd/go-fakeio v1.0.0/go.mod h1:joYxF906trVwp2JLrE4jlN7A0z6wrz8O6o1UjarbFzE= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= +github.com/segmentio/asm v1.1.3 h1:WM03sfUOENvvKexOLp+pCqgb/WDjsi7EK8gIsICtzhc= +github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= +github.com/segmentio/encoding v0.3.6 h1:E6lVLyDPseWEulBmCmAKPanDd3jiyGDo5gMcugCRwZQ= +github.com/segmentio/encoding v0.3.6/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= +github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= +github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spiffe/go-spiffe/v2 v2.7.0 h1:uXe1MflJoHw58wAUvxVlcM7WpKtijWG7I1UidcGh6g4= +github.com/spiffe/go-spiffe/v2 v2.7.0/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/teekennedy/goldmark-markdown v0.3.0 h1:ik9/biVGCwGWFg8dQ3KVm2pQ/wiiG0whYiUcz9xH0W8= +github.com/teekennedy/goldmark-markdown v0.3.0/go.mod h1:kMhDz8La77A9UHvJGsxejd0QUflN9sS+QXCqnhmxmNo= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= +github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.17 h1:p36OVWwRb246iHxA/U4p8OPEpOTESm4n+g+8t0EE5uA= +github.com/yuin/goldmark v1.7.17/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/zclconf/go-cty v1.18.1 h1:yEGE8M4iIZlyKQURZNb2SnEyZlZHUcBCnx6KF81KuwM= +github.com/zclconf/go-cty v1.18.1/go.mod h1:qpnV6EDNgC1sns/AleL1fvatHw72j+S+nS+MJ+T2CSg= +github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= +github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= +github.com/zclconf/go-cty-yaml v1.2.0 h1:GDyL4+e/Qe/S0B7YaecMLbVvAR/Mp21CXMOSiCTOi1M= +github.com/zclconf/go-cty-yaml v1.2.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/collector/featuregate v1.64.0 h1:lWEUtzSSPxR4n9PdQ/BQrDUaL5d49gCk2vpITBjMYVk= +go.opentelemetry.io/collector/featuregate v1.64.0/go.mod h1:4ga1QBMPEejXXmpyJS8lmaRpknJ3Lb9Bvk6e420bUFU= +go.opentelemetry.io/collector/internal/testutil v0.158.0 h1:ypt51JFMdHKoB6nODafWcUq9MiexCelDJ2zxXNu1xWo= +go.opentelemetry.io/collector/internal/testutil v0.158.0/go.mod h1:Jkjs6rkqs973LqgZ0Fe3zrokQRKULYXPIf4HuqStiEE= +go.opentelemetry.io/collector/pdata v1.64.0 h1:P3HDQLm/ksHWBbaWqtlXhAvC/4lTL5pqIG8TRScNDXI= +go.opentelemetry.io/collector/pdata v1.64.0/go.mod h1:aftmWhlLcl6WCUmquMr34Y2ufd+HtpQWu/zLQra2fGs= +go.opentelemetry.io/contrib/bridges/otelslog v0.20.0 h1:oEl2Pw/i4OQwhAuda2pAHFAcOMivA+Xa+iTccBfab/g= +go.opentelemetry.io/contrib/bridges/otelslog v0.20.0/go.mod h1:yMSQaiiq5dpfrSJCYLBcqFeJkFFI67seT4ngvx6jfVo= +go.opentelemetry.io/contrib/detectors/gcp v1.44.0 h1:NmLfL734pJhM0JKaYd2Y28+nY9dPRWYAAbxhRCrKXPw= +go.opentelemetry.io/contrib/detectors/gcp v1.44.0/go.mod h1:tNAsgd8avTGke1+MndXlU5Cru4PQ9Ai/cCNWQv/ZJ/s= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/otel v1.45.0 h1:pdrWmLHofpubmArBv1LgFSv1Z0Ie/ppdZzu+kUN5EeU= +go.opentelemetry.io/otel v1.45.0/go.mod h1:XZxIqPapzEYnhNSScF5DIqXhm/rYi0FzCe2XddAwZfQ= +go.opentelemetry.io/otel/bridge/opentracing v1.33.0 h1:eH88qvKdY7ns7Xu6WlJBQNOzZ3MVvBR6tEl2euaYS9w= +go.opentelemetry.io/otel/bridge/opentracing v1.33.0/go.mod h1:FNai/nhRSn/kHyv+V1zaf/30BU8hO/DXo0MvV0PaUS8= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.21.0 h1:WseeVYf5dJZTsyPiyW5L14k5qsSibqXAMTSiFEDiWr0= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.21.0/go.mod h1:SiLZnQS6Qk2eCpvr2CH/XMAOa64TWGXxEZJZCpD2Lmc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0 h1:QRefszxJmfPdjXUUm3j6iDzY03mTPXMjqErFqQ67vUg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0/go.mod h1:Tiz03lTBVBrm7eWZBOidzEaYaJa8tjwGUGv6d8mlTyk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.45.0 h1:fG5MCxGz8+2VtrN/WgqSpJFctVz24gpxj8CxkKmc8Ww= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.45.0/go.mod h1:BmAYTn+3ysbRe+IU2msxmf5Rx3g6DHvex+tWI3LdhYI= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/log v0.21.0 h1:SLsVDGmtyBrdw8/a2Z0bOIxou/+bN4z56GebH7T0LvA= +go.opentelemetry.io/otel/log v0.21.0/go.mod h1:iReetQrZL9Wyg84cCkOoCmqDHS5RCFfyxC7J+r8fn8g= +go.opentelemetry.io/otel/metric v1.45.0 h1:7Eg1uH7CJ5cXv9is6tnBe1FI6rj1nwUdbFypRm3br/M= +go.opentelemetry.io/otel/metric v1.45.0/go.mod h1:HAPbm1nd3p1PmFH7v2dR+6BjXxw+Lq4a2+pndMAm08s= +go.opentelemetry.io/otel/metric/x v0.67.0 h1:PcicCNZFkZ4bXfSooXdo3WN7RBOVOtjVdo1wD358Uns= +go.opentelemetry.io/otel/metric/x v0.67.0/go.mod h1:FBjCWZe6wgcqxcMtjdGiClDKXb2YxxXii0CXftE4QtI= +go.opentelemetry.io/otel/sdk v1.45.0 h1:4VVSMgQ83dUgW2aoX5f6JgLvHwIvzcuLnF9lUdCSpCw= +go.opentelemetry.io/otel/sdk v1.45.0/go.mod h1:Sr40LgXV7DsKMMJMKOhUWOgMWTfAaqvm2kF0g7ilwuA= +go.opentelemetry.io/otel/sdk/log v0.21.0 h1:QsE7XSR0ktQdKmRKGnR+f1ObGF32WG+7MER/P9KgmYc= +go.opentelemetry.io/otel/sdk/log v0.21.0/go.mod h1:m9mApjCoD2/1QuKCAptjv+BrG9WKOvQLVdNx+iBldTo= +go.opentelemetry.io/otel/sdk/log/logtest v0.21.0 h1:X+JBBgKlswCGYsmgL0CnoUUtlE//VB345c84jYAYkdQ= +go.opentelemetry.io/otel/sdk/log/logtest v0.21.0/go.mod h1:HD1575K8e6sIFBBDd5tZB3t9DlMytWXq9FuR+Y4rfjE= +go.opentelemetry.io/otel/sdk/metric v1.45.0 h1:oVFszMfyj1Am6s24Vtc7wBb8BKLcwepJjNEYILuiE3o= +go.opentelemetry.io/otel/sdk/metric v1.45.0/go.mod h1:vUWUxDZvu1WVRj8JA8S0AdhsPrZoDpA2DdZauIh4mDA= +go.opentelemetry.io/otel/trace v1.45.0 h1:l/mP6Uv7oNO7/TblbhpbgMidxhq1uO/rPsikOyVhxag= +go.opentelemetry.io/otel/trace v1.45.0/go.mod h1:qoJJA2xNMnxRrdISU/kLtfUH2wNeQbiv+jhs/CxI8bc= +go.opentelemetry.io/proto/otlp v1.11.0 h1:5rrYs0Ykyj50sdU/JU0x8etU+LubXWb+gED6TbEdMIk= +go.opentelemetry.io/proto/otlp v1.11.0/go.mod h1:SmVizdCOAm3XBtG1g1NnOdhW6jtddT72hLMhv8VwA8E= +go.opentelemetry.io/proto/slim/otlp v1.11.0 h1:zB37f+f99+y6UIZR4h7UpwbXd5kFNyip35U7GaJ/Jik= +go.opentelemetry.io/proto/slim/otlp v1.11.0/go.mod h1:mI3DeND+VXZuA4keqFPKDJ3BklwveYm1JqBcEWKDEOM= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.4.0 h1:mt+DWtks0biKnz0jXMpDbxWN0CHJi6OJDKe4GcREkcs= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.4.0/go.mod h1:7UXaX/7uT+kumUHd3LIWyjMlklEp0mPlrE9xmtbG6/8= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.4.0 h1:rLHkdB6eHDiRSIoz0cvNuTJsVJBxaL6IyS1e9BSaXLY= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.4.0/go.mod h1:BrX0dmOGsMuWNXXbFafTD7Gb6F3yK+2czVQ6+c24Cnk= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +gocloud.dev v0.46.1-0.20260629181806-a12ddce30739 h1:F571njcRLc2TIur9Ym3fHnOVaD7A7vsOliysXoq7+fQ= +gocloud.dev v0.46.1-0.20260629181806-a12ddce30739/go.mod h1:8d4USd9IwYeHSoVmpdo/zOIhKK5Wf0v3/5lnCOee/8w= +gocloud.dev/secrets/hashivault v0.46.0 h1:gQlpb/1wEwVoOavi/RGeQs5WlnzYddcDW81b0kywI0w= +gocloud.dev/secrets/hashivault v0.46.0/go.mod h1:I9RZ3S1+v/o++SRTJzSJ904LUGaBx7cpKVrzobm2SIA= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= +golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= +golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.283.0 h1:0lkp8u0MPwJVHqRL+nJlMAoZVVzbmiXmFHXMOTmSPik= +google.golang.org/api v0.283.0/go.mod h1:6Wssta4c5n9qHq5CBhmlai5h/PUa1djdDAIhYEHyvcM= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa h1:mfj8IS4EA4VAR9a6QDVxTQkLY64iBybb5QI1B4pXrpE= +google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:fuT7yonGw1Iq2oa+YC0fyqPPQJkgo/54gPNC6VitOkI= +google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d h1:FarXi840EJWSHYTN3ERkADbPWjl307+FGrA22KAVjjc= +google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d/go.mod h1:K/+WGbmBY7aNW1HDw1fJnKYo10i0DkAX6pows00dLig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d h1:IL4hdHzcUv2l/gcg98/Rj3FbtE6axwqslOW8SW0C+S0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.83.0 h1:JeNZEKJFbQxArAMl+hiytHauacDNqJUllNfmIMmpqnQ= +google.golang.org/grpc v1.83.0/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +lukechampine.com/frand v1.5.1 h1:fg0eRtdmGFIxhP5zQJzM1lFDbD6CUfu/f+7WgAZd5/w= +lukechampine.com/frand v1.5.1/go.mod h1:4VstaWc2plN4Mjr10chUD46RAVGWhpkZ5Nja8+Azp0Q= +mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4= +mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s= +pgregory.net/rapid v1.3.0 h1:vBvO0VSqti75J1jjYqpgPNBLKMd1+gxa9fYo7vk/Exc= +pgregory.net/rapid v1.3.0/go.mod h1:dPlE4OBBxgXPqkP79flB6sJL1dx5azpI7HQ9MY9Z7uk= diff --git a/provider/pkg/version/version.go b/provider/pkg/version/version.go new file mode 100644 index 0000000..d1f29aa --- /dev/null +++ b/provider/pkg/version/version.go @@ -0,0 +1,4 @@ +package version + +// Version is initialized by the Go linker to contain the semver of this build. +var Version string diff --git a/provider/resources.go b/provider/resources.go new file mode 100644 index 0000000..ac4c967 --- /dev/null +++ b/provider/resources.go @@ -0,0 +1,165 @@ +// Package dokploy bridges the Dokploy Terraform provider into a Pulumi +// provider. The Terraform provider itself lives in +// github.com/maxvojtkov/terraform-provider-dokploy; everything in this file is +// mapping — Terraform type names to Pulumi tokens, and Terraform provider +// configuration to Pulumi configuration. +package dokploy + +import ( + _ "embed" + + pfbridge "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/pf/tfbridge" + "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" + + tfshim "github.com/maxvojtkov/terraform-provider-dokploy/shim" +) + +// bridgeMetadata carries auto-aliasing state between tfgen runs so that token +// renames stay backwards compatible. tfgen rewrites it; the checked-in `{}` +// placeholder keeps the package compiling before the first generation. +// +//go:embed cmd/pulumi-resource-dokploy/bridge-metadata.json +var bridgeMetadata []byte + +// mainPkg is the single module every resource and data source lands in, giving +// tokens of the form `dokploy:index:Project`. +const mainPkg = "index" + +func res(name string) *tfbridge.ResourceInfo { + return &tfbridge.ResourceInfo{Tok: tfbridge.MakeResource("dokploy", mainPkg, name)} +} + +func ds(name string) *tfbridge.DataSourceInfo { + return &tfbridge.DataSourceInfo{Tok: tfbridge.MakeDataSource("dokploy", mainPkg, name)} +} + +// Provider returns the bridged Pulumi provider definition for Dokploy. +func Provider(version string) tfbridge.ProviderInfo { + if version == "" { + version = "0.0.0-dev" + } + + prov := tfbridge.ProviderInfo{ + P: pfbridge.ShimProvider(tfshim.NewProvider(version)), + Name: "dokploy", + + DisplayName: "Dokploy", + Publisher: "maxvojtkov", + Description: "A Pulumi package for creating and managing Dokploy resources", + Keywords: []string{ + "pulumi", "dokploy", "paas", "docker", "deployment", + "category/cloud", "category/infrastructure", + }, + License: "MPL-2.0", + Homepage: "https://github.com/maxvojtkov/pulumi-dokploy", + Repository: "https://github.com/maxvojtkov/pulumi-dokploy", + GitHubOrg: "maxvojtkov", + Version: version, + + // This is not a Pulumi-published provider, so the plugin binary is + // resolved from GitHub releases rather than the Pulumi CDN. + PluginDownloadURL: "github://api.github.com/maxvojtkov/pulumi-dokploy", + + TFProviderVersion: version, + MetadataInfo: tfbridge.NewProviderMetadata(bridgeMetadata), + + // The upstream provider is plugin-framework based, so opt in to the + // bridge's accurate preview and raw state handling. + EnableAccurateBridgePreview: true, + EnableAccuratePFBridgePreview: true, + EnableRawStateDelta: true, + + Config: map[string]*tfbridge.SchemaInfo{ + "host": { + Default: &tfbridge.DefaultInfo{EnvVars: []string{"DOKPLOY_HOST"}}, + }, + "api_key": { + Secret: tfbridge.True(), + Default: &tfbridge.DefaultInfo{EnvVars: []string{"DOKPLOY_API_KEY"}}, + }, + "timeout_seconds": { + Default: &tfbridge.DefaultInfo{EnvVars: []string{"DOKPLOY_TIMEOUT_SECONDS"}}, + }, + }, + + Resources: map[string]*tfbridge.ResourceInfo{ + // Core hierarchy. + "dokploy_project": res("Project"), + "dokploy_environment": res("Environment"), + "dokploy_application": res("Application"), + "dokploy_compose": res("Compose"), + + // Databases. + "dokploy_postgres": res("Postgres"), + "dokploy_mysql": res("MySql"), + "dokploy_mariadb": res("MariaDb"), + "dokploy_mongo": res("Mongo"), + "dokploy_redis": res("Redis"), + + // Networking and service attachments. + "dokploy_domain": res("Domain"), + "dokploy_mount": res("Mount"), + "dokploy_port": res("Port"), + "dokploy_redirect": res("Redirect"), + "dokploy_security": res("Security"), + + // Account-level settings. + "dokploy_registry": res("Registry"), + "dokploy_ssh_key": res("SshKey"), + "dokploy_certificate": res("Certificate"), + "dokploy_destination": res("Destination"), + }, + + DataSources: map[string]*tfbridge.DataSourceInfo{ + "dokploy_project": ds("getProject"), + "dokploy_projects": ds("getProjects"), + "dokploy_environment": ds("getEnvironment"), + "dokploy_application": ds("getApplication"), + "dokploy_servers": ds("getServers"), + }, + + JavaScript: &tfbridge.JavaScriptInfo{ + PackageName: "@maxvojtkov/pulumi-dokploy", + Dependencies: map[string]string{"@pulumi/pulumi": "^3.0.0"}, + DevDependencies: map[string]string{"@types/node": "^18", "typescript": "^4.6.0"}, + RespectSchemaVersion: true, + }, + + Python: pythonInfo(), + + Golang: &tfbridge.GolangInfo{ + ImportBasePath: "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy", + GenerateResourceContainerTypes: true, + RespectSchemaVersion: true, + }, + + CSharp: &tfbridge.CSharpInfo{ + RootNamespace: "Maxvojtkov", + PackageReferences: map[string]string{"Pulumi": "3.*"}, + RespectSchemaVersion: true, + }, + } + + // Every Dokploy resource carries a user-visible `name`; let Pulumi + // auto-generate one when the program does not supply it. + prov.SetAutonaming(255, "-") + + // Keeps tokens stable if a future release renames or re-modules anything. + if err := prov.ApplyAutoAliases(); err != nil { + panic(err) + } + + return prov +} + +// pythonInfo exists because PyProject is an anonymous struct field and cannot +// be set inside a composite literal. +func pythonInfo() *tfbridge.PythonInfo { + info := &tfbridge.PythonInfo{ + PackageName: "pulumi_dokploy", + Requires: map[string]string{"pulumi": ">=3.0.0,<4.0.0"}, + RespectSchemaVersion: true, + } + info.PyProject.Enabled = true + return info +} diff --git a/sdk/dotnet/.gitattributes b/sdk/dotnet/.gitattributes new file mode 100644 index 0000000..aae64e2 --- /dev/null +++ b/sdk/dotnet/.gitattributes @@ -0,0 +1 @@ +* linguist-generated diff --git a/sdk/dotnet/.gitignore b/sdk/dotnet/.gitignore new file mode 100644 index 0000000..1746e32 --- /dev/null +++ b/sdk/dotnet/.gitignore @@ -0,0 +1,2 @@ +bin +obj diff --git a/sdk/dotnet/Application.cs b/sdk/dotnet/Application.cs new file mode 100644 index 0000000..de9d978 --- /dev/null +++ b/sdk/dotnet/Application.cs @@ -0,0 +1,1906 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/application:Application")] + public partial class Application : global::Pulumi.CustomResource + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("applicationStatus")] + public Output ApplicationStatus { get; private set; } = null!; + + /// + /// Arguments appended to the container command. + /// + [Output("args")] + public Output> Args { get; private set; } = null!; + + /// + /// Deploy automatically when the configured trigger fires. + /// + [Output("autoDeploy")] + public Output AutoDeploy { get; private set; } = null!; + + /// + /// Bitbucket branch to build. + /// + [Output("bitbucketBranch")] + public Output BitbucketBranch { get; private set; } = null!; + + /// + /// Path within the Bitbucket repository to build from. + /// + [Output("bitbucketBuildPath")] + public Output BitbucketBuildPath { get; private set; } = null!; + + /// + /// ID of the configured Bitbucket provider connection. + /// + [Output("bitbucketId")] + public Output BitbucketId { get; private set; } = null!; + + /// + /// Bitbucket repository owner. + /// + [Output("bitbucketOwner")] + public Output BitbucketOwner { get; private set; } = null!; + + /// + /// Bitbucket repository name. + /// + [Output("bitbucketRepository")] + public Output BitbucketRepository { get; private set; } = null!; + + /// + /// Bitbucket repository slug. + /// + [Output("bitbucketRepositorySlug")] + public Output BitbucketRepositorySlug { get; private set; } = null!; + + /// + /// GitHub branch to build. + /// + [Output("branch")] + public Output Branch { get; private set; } = null!; + + /// + /// Docker build arguments in `KEY=value` format, one per line. + /// + [Output("buildArgs")] + public Output BuildArgs { get; private set; } = null!; + + /// + /// Path within the GitHub repository to build from. + /// + [Output("buildPath")] + public Output BuildPath { get; private set; } = null!; + + /// + /// Registry used by a dedicated build server. + /// + [Output("buildRegistryId")] + public Output BuildRegistryId { get; private set; } = null!; + + /// + /// Docker build secrets in `KEY=value` format, one per line. + /// + [Output("buildSecrets")] + public Output BuildSecrets { get; private set; } = null!; + + /// + /// Server that performs builds, when separate from the deploy server. + /// + [Output("buildServerId")] + public Output BuildServerId { get; private set; } = null!; + + /// + /// How the application is built. Valid values: `Dockerfile`, `HerokuBuildpacks`, `PaketoBuildpacks`, `Nixpacks`, `Static`, `Railpack`. + /// + [Output("buildType")] + public Output BuildType { get; private set; } = null!; + + /// + /// Discard the build cache on the next deployment. + /// + [Output("cleanCache")] + public Output CleanCache { get; private set; } = null!; + + /// + /// Override the container entrypoint command. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Hard CPU limit, for example `1`. + /// + [Output("cpuLimit")] + public Output CpuLimit { get; private set; } = null!; + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Output("cpuReservation")] + public Output CpuReservation { get; private set; } = null!; + + /// + /// Write the environment variables to a `.env` file in the container. + /// + [Output("createEnvFile")] + public Output CreateEnvFile { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the application was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Branch to build for a custom Git remote. + /// + [Output("customGitBranch")] + public Output CustomGitBranch { get; private set; } = null!; + + /// + /// Path within a custom Git repository to build from. + /// + [Output("customGitBuildPath")] + public Output CustomGitBuildPath { get; private set; } = null!; + + /// + /// SSH key used to clone a private custom Git remote. + /// + [Output("customGitSshKeyId")] + public Output CustomGitSshKeyId { get; private set; } = null!; + + /// + /// Git remote URL, when `SourceType` is `Git`. + /// + [Output("customGitUrl")] + public Output CustomGitUrl { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Output("detachDokployNetwork")] + public Output DetachDokployNetwork { get; private set; } = null!; + + /// + /// Target stage for a multi-stage Docker build. + /// + [Output("dockerBuildStage")] + public Output DockerBuildStage { get; private set; } = null!; + + /// + /// Docker build context path. + /// + [Output("dockerContextPath")] + public Output DockerContextPath { get; private set; } = null!; + + /// + /// Docker image reference, when `SourceType` is `Docker`. + /// + [Output("dockerImage")] + public Output DockerImage { get; private set; } = null!; + + /// + /// Path to the Dockerfile, when `BuildType` is `Dockerfile`. + /// + [Output("dockerfile")] + public Output Dockerfile { get; private set; } = null!; + + /// + /// Clone Git submodules when checking out the repository. + /// + [Output("enableSubmodules")] + public Output EnableSubmodules { get; private set; } = null!; + + /// + /// Whether the application is enabled. + /// + [Output("enabled")] + public Output Enabled { get; private set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Output("endpointSpecSwarm")] + public Output EndpointSpecSwarm { get; private set; } = null!; + + /// + /// Runtime environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this application belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Gitea branch to build. + /// + [Output("giteaBranch")] + public Output GiteaBranch { get; private set; } = null!; + + /// + /// Path within the Gitea repository to build from. + /// + [Output("giteaBuildPath")] + public Output GiteaBuildPath { get; private set; } = null!; + + /// + /// ID of the configured Gitea provider connection. + /// + [Output("giteaId")] + public Output GiteaId { get; private set; } = null!; + + /// + /// Gitea repository owner. + /// + [Output("giteaOwner")] + public Output GiteaOwner { get; private set; } = null!; + + /// + /// Gitea repository name. + /// + [Output("giteaRepository")] + public Output GiteaRepository { get; private set; } = null!; + + /// + /// ID of the configured GitHub provider connection. + /// + [Output("githubId")] + public Output GithubId { get; private set; } = null!; + + /// + /// GitLab branch to build. + /// + [Output("gitlabBranch")] + public Output GitlabBranch { get; private set; } = null!; + + /// + /// Path within the GitLab repository to build from. + /// + [Output("gitlabBuildPath")] + public Output GitlabBuildPath { get; private set; } = null!; + + /// + /// ID of the configured GitLab provider connection. + /// + [Output("gitlabId")] + public Output GitlabId { get; private set; } = null!; + + /// + /// GitLab repository owner. + /// + [Output("gitlabOwner")] + public Output GitlabOwner { get; private set; } = null!; + + /// + /// Full GitLab namespace path. + /// + [Output("gitlabPathNamespace")] + public Output GitlabPathNamespace { get; private set; } = null!; + + /// + /// Numeric GitLab project ID. + /// + [Output("gitlabProjectId")] + public Output GitlabProjectId { get; private set; } = null!; + + /// + /// GitLab repository name. + /// + [Output("gitlabRepository")] + public Output GitlabRepository { get; private set; } = null!; + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Output("healthCheckSwarm")] + public Output HealthCheckSwarm { get; private set; } = null!; + + /// + /// Heroku buildpack stack version. + /// + [Output("herokuVersion")] + public Output HerokuVersion { get; private set; } = null!; + + /// + /// Build a preview deployment for each pull request. + /// + [Output("isPreviewDeploymentsActive")] + public Output IsPreviewDeploymentsActive { get; private set; } = null!; + + /// + /// Serve a static build as a single-page application. + /// + [Output("isStaticSpa")] + public Output IsStaticSpa { get; private set; } = null!; + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Output("labelsSwarm")] + public Output LabelsSwarm { get; private set; } = null!; + + /// + /// Hard memory limit, for example `512m`. + /// + [Output("memoryLimit")] + public Output MemoryLimit { get; private set; } = null!; + + /// + /// Soft memory reservation, for example `256m`. + /// + [Output("memoryReservation")] + public Output MemoryReservation { get; private set; } = null!; + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Output("modeSwarm")] + public Output ModeSwarm { get; private set; } = null!; + + /// + /// Display name of the application. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// IDs of additional Docker networks to attach. + /// + [Output("networkIds")] + public Output> NetworkIds { get; private set; } = null!; + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Output("networkSwarm")] + public Output NetworkSwarm { get; private set; } = null!; + + /// + /// GitHub repository owner. + /// + [Output("owner")] + public Output Owner { get; private set; } = null!; + + /// + /// Registry password, when pulling a private image. + /// + [Output("password")] + public Output Password { get; private set; } = null!; + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Output("placementSwarm")] + public Output PlacementSwarm { get; private set; } = null!; + + /// + /// Build arguments applied to preview deployments. + /// + [Output("previewBuildArgs")] + public Output PreviewBuildArgs { get; private set; } = null!; + + /// + /// Build secrets applied to preview deployments. + /// + [Output("previewBuildSecrets")] + public Output PreviewBuildSecrets { get; private set; } = null!; + + /// + /// Certificate strategy for preview deployments. Valid values: `Letsencrypt`, `None`, `Custom`. + /// + [Output("previewCertificateType")] + public Output PreviewCertificateType { get; private set; } = null!; + + /// + /// Traefik certificate resolver for preview deployments. + /// + [Output("previewCustomCertResolver")] + public Output PreviewCustomCertResolver { get; private set; } = null!; + + /// + /// Environment variables applied to preview deployments. + /// + [Output("previewEnv")] + public Output PreviewEnv { get; private set; } = null!; + + /// + /// Serve preview deployments over HTTPS. + /// + [Output("previewHttps")] + public Output PreviewHttps { get; private set; } = null!; + + /// + /// Pull request labels that opt into preview deployments. + /// + [Output("previewLabels")] + public Output> PreviewLabels { get; private set; } = null!; + + /// + /// Maximum number of concurrent preview deployments. + /// + [Output("previewLimit")] + public Output PreviewLimit { get; private set; } = null!; + + /// + /// Base path for preview deployments. + /// + [Output("previewPath")] + public Output PreviewPath { get; private set; } = null!; + + /// + /// Container port exposed by preview deployments. + /// + [Output("previewPort")] + public Output PreviewPort { get; private set; } = null!; + + /// + /// Wildcard domain used to expose preview deployments. + /// + [Output("previewWildcard")] + public Output PreviewWildcard { get; private set; } = null!; + + /// + /// Directory served when `BuildType` is `Static`. + /// + [Output("publishDirectory")] + public Output PublishDirectory { get; private set; } = null!; + + /// + /// Railpack version. + /// + [Output("railpackVersion")] + public Output RailpackVersion { get; private set; } = null!; + + /// + /// Registry used to push the built image. + /// + [Output("registryId")] + public Output RegistryId { get; private set; } = null!; + + /// + /// Registry URL, when pulling a private image. + /// + [Output("registryUrl")] + public Output RegistryUrl { get; private set; } = null!; + + /// + /// Number of replicas to run. + /// + [Output("replicas")] + public Output Replicas { get; private set; } = null!; + + /// + /// GitHub repository name. + /// + [Output("repository")] + public Output Repository { get; private set; } = null!; + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Output("restartPolicySwarm")] + public Output RestartPolicySwarm { get; private set; } = null!; + + /// + /// Keep previous images so deployments can be rolled back. + /// + [Output("rollbackActive")] + public Output RollbackActive { get; private set; } = null!; + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Output("rollbackConfigSwarm")] + public Output RollbackConfigSwarm { get; private set; } = null!; + + /// + /// Registry used to store rollback images. + /// + [Output("rollbackRegistryId")] + public Output RollbackRegistryId { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Where the application's code or image comes from. Valid values: `Docker`, `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Drop`. + /// + [Output("sourceType")] + public Output SourceType { get; private set; } = null!; + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Output("stopGracePeriodSwarm")] + public Output StopGracePeriodSwarm { get; private set; } = null!; + + /// + /// Display subtitle shown in the Dokploy UI. + /// + [Output("subtitle")] + public Output Subtitle { get; private set; } = null!; + + /// + /// Display title shown in the Dokploy UI. + /// + [Output("title")] + public Output Title { get; private set; } = null!; + + /// + /// What triggers an automatic GitHub deployment. Valid values: `Push`, `Tag`. + /// + [Output("triggerType")] + public Output TriggerType { get; private set; } = null!; + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Output("ulimitsSwarm")] + public Output UlimitsSwarm { get; private set; } = null!; + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Output("updateConfigSwarm")] + public Output UpdateConfigSwarm { get; private set; } = null!; + + /// + /// Registry username, when pulling a private image. + /// + [Output("username")] + public Output Username { get; private set; } = null!; + + /// + /// Glob patterns that limit which changed paths trigger an automatic deployment. + /// + [Output("watchPaths")] + public Output> WatchPaths { get; private set; } = null!; + + + /// + /// Create a Application resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Application(string name, ApplicationArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/application:Application", name, args ?? new ApplicationArgs(), MakeResourceOptions(options, "")) + { + } + + private Application(string name, Input id, ApplicationState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/application:Application", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "buildSecrets", + "password", + "previewBuildSecrets", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Application resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Application Get(string name, Input id, ApplicationState? state = null, CustomResourceOptions? options = null) + { + return new Application(name, id, state, options); + } + } + + public sealed class ApplicationArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + /// + [Input("appName")] + public Input? AppName { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Deploy automatically when the configured trigger fires. + /// + [Input("autoDeploy")] + public Input? AutoDeploy { get; set; } + + /// + /// Bitbucket branch to build. + /// + [Input("bitbucketBranch")] + public Input? BitbucketBranch { get; set; } + + /// + /// Path within the Bitbucket repository to build from. + /// + [Input("bitbucketBuildPath")] + public Input? BitbucketBuildPath { get; set; } + + /// + /// ID of the configured Bitbucket provider connection. + /// + [Input("bitbucketId")] + public Input? BitbucketId { get; set; } + + /// + /// Bitbucket repository owner. + /// + [Input("bitbucketOwner")] + public Input? BitbucketOwner { get; set; } + + /// + /// Bitbucket repository name. + /// + [Input("bitbucketRepository")] + public Input? BitbucketRepository { get; set; } + + /// + /// Bitbucket repository slug. + /// + [Input("bitbucketRepositorySlug")] + public Input? BitbucketRepositorySlug { get; set; } + + /// + /// GitHub branch to build. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// Docker build arguments in `KEY=value` format, one per line. + /// + [Input("buildArgs")] + public Input? BuildArgs { get; set; } + + /// + /// Path within the GitHub repository to build from. + /// + [Input("buildPath")] + public Input? BuildPath { get; set; } + + /// + /// Registry used by a dedicated build server. + /// + [Input("buildRegistryId")] + public Input? BuildRegistryId { get; set; } + + [Input("buildSecrets")] + private Input? _buildSecrets; + + /// + /// Docker build secrets in `KEY=value` format, one per line. + /// + public Input? BuildSecrets + { + get => _buildSecrets; + set + { + var emptySecret = Output.CreateSecret(0); + _buildSecrets = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Server that performs builds, when separate from the deploy server. + /// + [Input("buildServerId")] + public Input? BuildServerId { get; set; } + + /// + /// How the application is built. Valid values: `Dockerfile`, `HerokuBuildpacks`, `PaketoBuildpacks`, `Nixpacks`, `Static`, `Railpack`. + /// + [Input("buildType")] + public Input? BuildType { get; set; } + + /// + /// Discard the build cache on the next deployment. + /// + [Input("cleanCache")] + public Input? CleanCache { get; set; } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// Write the environment variables to a `.env` file in the container. + /// + [Input("createEnvFile")] + public Input? CreateEnvFile { get; set; } + + /// + /// Branch to build for a custom Git remote. + /// + [Input("customGitBranch")] + public Input? CustomGitBranch { get; set; } + + /// + /// Path within a custom Git repository to build from. + /// + [Input("customGitBuildPath")] + public Input? CustomGitBuildPath { get; set; } + + /// + /// SSH key used to clone a private custom Git remote. + /// + [Input("customGitSshKeyId")] + public Input? CustomGitSshKeyId { get; set; } + + /// + /// Git remote URL, when `SourceType` is `Git`. + /// + [Input("customGitUrl")] + public Input? CustomGitUrl { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// Target stage for a multi-stage Docker build. + /// + [Input("dockerBuildStage")] + public Input? DockerBuildStage { get; set; } + + /// + /// Docker build context path. + /// + [Input("dockerContextPath")] + public Input? DockerContextPath { get; set; } + + /// + /// Docker image reference, when `SourceType` is `Docker`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Path to the Dockerfile, when `BuildType` is `Dockerfile`. + /// + [Input("dockerfile")] + public Input? Dockerfile { get; set; } + + /// + /// Clone Git submodules when checking out the repository. + /// + [Input("enableSubmodules")] + public Input? EnableSubmodules { get; set; } + + /// + /// Whether the application is enabled. + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Runtime environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this application belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Gitea branch to build. + /// + [Input("giteaBranch")] + public Input? GiteaBranch { get; set; } + + /// + /// Path within the Gitea repository to build from. + /// + [Input("giteaBuildPath")] + public Input? GiteaBuildPath { get; set; } + + /// + /// ID of the configured Gitea provider connection. + /// + [Input("giteaId")] + public Input? GiteaId { get; set; } + + /// + /// Gitea repository owner. + /// + [Input("giteaOwner")] + public Input? GiteaOwner { get; set; } + + /// + /// Gitea repository name. + /// + [Input("giteaRepository")] + public Input? GiteaRepository { get; set; } + + /// + /// ID of the configured GitHub provider connection. + /// + [Input("githubId")] + public Input? GithubId { get; set; } + + /// + /// GitLab branch to build. + /// + [Input("gitlabBranch")] + public Input? GitlabBranch { get; set; } + + /// + /// Path within the GitLab repository to build from. + /// + [Input("gitlabBuildPath")] + public Input? GitlabBuildPath { get; set; } + + /// + /// ID of the configured GitLab provider connection. + /// + [Input("gitlabId")] + public Input? GitlabId { get; set; } + + /// + /// GitLab repository owner. + /// + [Input("gitlabOwner")] + public Input? GitlabOwner { get; set; } + + /// + /// Full GitLab namespace path. + /// + [Input("gitlabPathNamespace")] + public Input? GitlabPathNamespace { get; set; } + + /// + /// Numeric GitLab project ID. + /// + [Input("gitlabProjectId")] + public Input? GitlabProjectId { get; set; } + + /// + /// GitLab repository name. + /// + [Input("gitlabRepository")] + public Input? GitlabRepository { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Heroku buildpack stack version. + /// + [Input("herokuVersion")] + public Input? HerokuVersion { get; set; } + + /// + /// Build a preview deployment for each pull request. + /// + [Input("isPreviewDeploymentsActive")] + public Input? IsPreviewDeploymentsActive { get; set; } + + /// + /// Serve a static build as a single-page application. + /// + [Input("isStaticSpa")] + public Input? IsStaticSpa { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the application. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// GitHub repository owner. + /// + [Input("owner")] + public Input? Owner { get; set; } + + [Input("password")] + private Input? _password; + + /// + /// Registry password, when pulling a private image. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Build arguments applied to preview deployments. + /// + [Input("previewBuildArgs")] + public Input? PreviewBuildArgs { get; set; } + + [Input("previewBuildSecrets")] + private Input? _previewBuildSecrets; + + /// + /// Build secrets applied to preview deployments. + /// + public Input? PreviewBuildSecrets + { + get => _previewBuildSecrets; + set + { + var emptySecret = Output.CreateSecret(0); + _previewBuildSecrets = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Certificate strategy for preview deployments. Valid values: `Letsencrypt`, `None`, `Custom`. + /// + [Input("previewCertificateType")] + public Input? PreviewCertificateType { get; set; } + + /// + /// Traefik certificate resolver for preview deployments. + /// + [Input("previewCustomCertResolver")] + public Input? PreviewCustomCertResolver { get; set; } + + /// + /// Environment variables applied to preview deployments. + /// + [Input("previewEnv")] + public Input? PreviewEnv { get; set; } + + /// + /// Serve preview deployments over HTTPS. + /// + [Input("previewHttps")] + public Input? PreviewHttps { get; set; } + + [Input("previewLabels")] + private InputList? _previewLabels; + + /// + /// Pull request labels that opt into preview deployments. + /// + public InputList PreviewLabels + { + get => _previewLabels ?? (_previewLabels = new InputList()); + set => _previewLabels = value; + } + + /// + /// Maximum number of concurrent preview deployments. + /// + [Input("previewLimit")] + public Input? PreviewLimit { get; set; } + + /// + /// Base path for preview deployments. + /// + [Input("previewPath")] + public Input? PreviewPath { get; set; } + + /// + /// Container port exposed by preview deployments. + /// + [Input("previewPort")] + public Input? PreviewPort { get; set; } + + /// + /// Wildcard domain used to expose preview deployments. + /// + [Input("previewWildcard")] + public Input? PreviewWildcard { get; set; } + + /// + /// Directory served when `BuildType` is `Static`. + /// + [Input("publishDirectory")] + public Input? PublishDirectory { get; set; } + + /// + /// Railpack version. + /// + [Input("railpackVersion")] + public Input? RailpackVersion { get; set; } + + /// + /// Registry used to push the built image. + /// + [Input("registryId")] + public Input? RegistryId { get; set; } + + /// + /// Registry URL, when pulling a private image. + /// + [Input("registryUrl")] + public Input? RegistryUrl { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// GitHub repository name. + /// + [Input("repository")] + public Input? Repository { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Keep previous images so deployments can be rolled back. + /// + [Input("rollbackActive")] + public Input? RollbackActive { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Registry used to store rollback images. + /// + [Input("rollbackRegistryId")] + public Input? RollbackRegistryId { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Where the application's code or image comes from. Valid values: `Docker`, `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Drop`. + /// + [Input("sourceType")] + public Input? SourceType { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Display subtitle shown in the Dokploy UI. + /// + [Input("subtitle")] + public Input? Subtitle { get; set; } + + /// + /// Display title shown in the Dokploy UI. + /// + [Input("title")] + public Input? Title { get; set; } + + /// + /// What triggers an automatic GitHub deployment. Valid values: `Push`, `Tag`. + /// + [Input("triggerType")] + public Input? TriggerType { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + /// + /// Registry username, when pulling a private image. + /// + [Input("username")] + public Input? Username { get; set; } + + [Input("watchPaths")] + private InputList? _watchPaths; + + /// + /// Glob patterns that limit which changed paths trigger an automatic deployment. + /// + public InputList WatchPaths + { + get => _watchPaths ?? (_watchPaths = new InputList()); + set => _watchPaths = value; + } + + public ApplicationArgs() + { + } + public static new ApplicationArgs Empty => new ApplicationArgs(); + } + + public sealed class ApplicationState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("applicationStatus")] + public Input? ApplicationStatus { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Deploy automatically when the configured trigger fires. + /// + [Input("autoDeploy")] + public Input? AutoDeploy { get; set; } + + /// + /// Bitbucket branch to build. + /// + [Input("bitbucketBranch")] + public Input? BitbucketBranch { get; set; } + + /// + /// Path within the Bitbucket repository to build from. + /// + [Input("bitbucketBuildPath")] + public Input? BitbucketBuildPath { get; set; } + + /// + /// ID of the configured Bitbucket provider connection. + /// + [Input("bitbucketId")] + public Input? BitbucketId { get; set; } + + /// + /// Bitbucket repository owner. + /// + [Input("bitbucketOwner")] + public Input? BitbucketOwner { get; set; } + + /// + /// Bitbucket repository name. + /// + [Input("bitbucketRepository")] + public Input? BitbucketRepository { get; set; } + + /// + /// Bitbucket repository slug. + /// + [Input("bitbucketRepositorySlug")] + public Input? BitbucketRepositorySlug { get; set; } + + /// + /// GitHub branch to build. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// Docker build arguments in `KEY=value` format, one per line. + /// + [Input("buildArgs")] + public Input? BuildArgs { get; set; } + + /// + /// Path within the GitHub repository to build from. + /// + [Input("buildPath")] + public Input? BuildPath { get; set; } + + /// + /// Registry used by a dedicated build server. + /// + [Input("buildRegistryId")] + public Input? BuildRegistryId { get; set; } + + [Input("buildSecrets")] + private Input? _buildSecrets; + + /// + /// Docker build secrets in `KEY=value` format, one per line. + /// + public Input? BuildSecrets + { + get => _buildSecrets; + set + { + var emptySecret = Output.CreateSecret(0); + _buildSecrets = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Server that performs builds, when separate from the deploy server. + /// + [Input("buildServerId")] + public Input? BuildServerId { get; set; } + + /// + /// How the application is built. Valid values: `Dockerfile`, `HerokuBuildpacks`, `PaketoBuildpacks`, `Nixpacks`, `Static`, `Railpack`. + /// + [Input("buildType")] + public Input? BuildType { get; set; } + + /// + /// Discard the build cache on the next deployment. + /// + [Input("cleanCache")] + public Input? CleanCache { get; set; } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// Write the environment variables to a `.env` file in the container. + /// + [Input("createEnvFile")] + public Input? CreateEnvFile { get; set; } + + /// + /// RFC 3339 timestamp of when the application was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Branch to build for a custom Git remote. + /// + [Input("customGitBranch")] + public Input? CustomGitBranch { get; set; } + + /// + /// Path within a custom Git repository to build from. + /// + [Input("customGitBuildPath")] + public Input? CustomGitBuildPath { get; set; } + + /// + /// SSH key used to clone a private custom Git remote. + /// + [Input("customGitSshKeyId")] + public Input? CustomGitSshKeyId { get; set; } + + /// + /// Git remote URL, when `SourceType` is `Git`. + /// + [Input("customGitUrl")] + public Input? CustomGitUrl { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// Target stage for a multi-stage Docker build. + /// + [Input("dockerBuildStage")] + public Input? DockerBuildStage { get; set; } + + /// + /// Docker build context path. + /// + [Input("dockerContextPath")] + public Input? DockerContextPath { get; set; } + + /// + /// Docker image reference, when `SourceType` is `Docker`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Path to the Dockerfile, when `BuildType` is `Dockerfile`. + /// + [Input("dockerfile")] + public Input? Dockerfile { get; set; } + + /// + /// Clone Git submodules when checking out the repository. + /// + [Input("enableSubmodules")] + public Input? EnableSubmodules { get; set; } + + /// + /// Whether the application is enabled. + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Runtime environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this application belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Gitea branch to build. + /// + [Input("giteaBranch")] + public Input? GiteaBranch { get; set; } + + /// + /// Path within the Gitea repository to build from. + /// + [Input("giteaBuildPath")] + public Input? GiteaBuildPath { get; set; } + + /// + /// ID of the configured Gitea provider connection. + /// + [Input("giteaId")] + public Input? GiteaId { get; set; } + + /// + /// Gitea repository owner. + /// + [Input("giteaOwner")] + public Input? GiteaOwner { get; set; } + + /// + /// Gitea repository name. + /// + [Input("giteaRepository")] + public Input? GiteaRepository { get; set; } + + /// + /// ID of the configured GitHub provider connection. + /// + [Input("githubId")] + public Input? GithubId { get; set; } + + /// + /// GitLab branch to build. + /// + [Input("gitlabBranch")] + public Input? GitlabBranch { get; set; } + + /// + /// Path within the GitLab repository to build from. + /// + [Input("gitlabBuildPath")] + public Input? GitlabBuildPath { get; set; } + + /// + /// ID of the configured GitLab provider connection. + /// + [Input("gitlabId")] + public Input? GitlabId { get; set; } + + /// + /// GitLab repository owner. + /// + [Input("gitlabOwner")] + public Input? GitlabOwner { get; set; } + + /// + /// Full GitLab namespace path. + /// + [Input("gitlabPathNamespace")] + public Input? GitlabPathNamespace { get; set; } + + /// + /// Numeric GitLab project ID. + /// + [Input("gitlabProjectId")] + public Input? GitlabProjectId { get; set; } + + /// + /// GitLab repository name. + /// + [Input("gitlabRepository")] + public Input? GitlabRepository { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Heroku buildpack stack version. + /// + [Input("herokuVersion")] + public Input? HerokuVersion { get; set; } + + /// + /// Build a preview deployment for each pull request. + /// + [Input("isPreviewDeploymentsActive")] + public Input? IsPreviewDeploymentsActive { get; set; } + + /// + /// Serve a static build as a single-page application. + /// + [Input("isStaticSpa")] + public Input? IsStaticSpa { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the application. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// GitHub repository owner. + /// + [Input("owner")] + public Input? Owner { get; set; } + + [Input("password")] + private Input? _password; + + /// + /// Registry password, when pulling a private image. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Build arguments applied to preview deployments. + /// + [Input("previewBuildArgs")] + public Input? PreviewBuildArgs { get; set; } + + [Input("previewBuildSecrets")] + private Input? _previewBuildSecrets; + + /// + /// Build secrets applied to preview deployments. + /// + public Input? PreviewBuildSecrets + { + get => _previewBuildSecrets; + set + { + var emptySecret = Output.CreateSecret(0); + _previewBuildSecrets = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Certificate strategy for preview deployments. Valid values: `Letsencrypt`, `None`, `Custom`. + /// + [Input("previewCertificateType")] + public Input? PreviewCertificateType { get; set; } + + /// + /// Traefik certificate resolver for preview deployments. + /// + [Input("previewCustomCertResolver")] + public Input? PreviewCustomCertResolver { get; set; } + + /// + /// Environment variables applied to preview deployments. + /// + [Input("previewEnv")] + public Input? PreviewEnv { get; set; } + + /// + /// Serve preview deployments over HTTPS. + /// + [Input("previewHttps")] + public Input? PreviewHttps { get; set; } + + [Input("previewLabels")] + private InputList? _previewLabels; + + /// + /// Pull request labels that opt into preview deployments. + /// + public InputList PreviewLabels + { + get => _previewLabels ?? (_previewLabels = new InputList()); + set => _previewLabels = value; + } + + /// + /// Maximum number of concurrent preview deployments. + /// + [Input("previewLimit")] + public Input? PreviewLimit { get; set; } + + /// + /// Base path for preview deployments. + /// + [Input("previewPath")] + public Input? PreviewPath { get; set; } + + /// + /// Container port exposed by preview deployments. + /// + [Input("previewPort")] + public Input? PreviewPort { get; set; } + + /// + /// Wildcard domain used to expose preview deployments. + /// + [Input("previewWildcard")] + public Input? PreviewWildcard { get; set; } + + /// + /// Directory served when `BuildType` is `Static`. + /// + [Input("publishDirectory")] + public Input? PublishDirectory { get; set; } + + /// + /// Railpack version. + /// + [Input("railpackVersion")] + public Input? RailpackVersion { get; set; } + + /// + /// Registry used to push the built image. + /// + [Input("registryId")] + public Input? RegistryId { get; set; } + + /// + /// Registry URL, when pulling a private image. + /// + [Input("registryUrl")] + public Input? RegistryUrl { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// GitHub repository name. + /// + [Input("repository")] + public Input? Repository { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Keep previous images so deployments can be rolled back. + /// + [Input("rollbackActive")] + public Input? RollbackActive { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Registry used to store rollback images. + /// + [Input("rollbackRegistryId")] + public Input? RollbackRegistryId { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Where the application's code or image comes from. Valid values: `Docker`, `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Drop`. + /// + [Input("sourceType")] + public Input? SourceType { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Display subtitle shown in the Dokploy UI. + /// + [Input("subtitle")] + public Input? Subtitle { get; set; } + + /// + /// Display title shown in the Dokploy UI. + /// + [Input("title")] + public Input? Title { get; set; } + + /// + /// What triggers an automatic GitHub deployment. Valid values: `Push`, `Tag`. + /// + [Input("triggerType")] + public Input? TriggerType { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + /// + /// Registry username, when pulling a private image. + /// + [Input("username")] + public Input? Username { get; set; } + + [Input("watchPaths")] + private InputList? _watchPaths; + + /// + /// Glob patterns that limit which changed paths trigger an automatic deployment. + /// + public InputList WatchPaths + { + get => _watchPaths ?? (_watchPaths = new InputList()); + set => _watchPaths = value; + } + + public ApplicationState() + { + } + public static new ApplicationState Empty => new ApplicationState(); + } +} diff --git a/sdk/dotnet/Certificate.cs b/sdk/dotnet/Certificate.cs new file mode 100644 index 0000000..047c99b --- /dev/null +++ b/sdk/dotnet/Certificate.cs @@ -0,0 +1,202 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/certificate:Certificate")] + public partial class Certificate : global::Pulumi.CustomResource + { + /// + /// Whether Dokploy should renew this certificate automatically. + /// + [Output("autoRenew")] + public Output AutoRenew { get; private set; } = null!; + + /// + /// PEM-encoded certificate chain. + /// + [Output("certificateData")] + public Output CertificateData { get; private set; } = null!; + + /// + /// Path where Dokploy writes the certificate on disk. + /// + [Output("certificatePath")] + public Output CertificatePath { get; private set; } = null!; + + /// + /// Display name of the certificate. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// PEM-encoded private key. + /// + [Output("privateKey")] + public Output PrivateKey { get; private set; } = null!; + + /// + /// Server this certificate is installed on. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + + /// + /// Create a Certificate resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Certificate(string name, CertificateArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/certificate:Certificate", name, args ?? new CertificateArgs(), MakeResourceOptions(options, "")) + { + } + + private Certificate(string name, Input id, CertificateState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/certificate:Certificate", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "privateKey", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Certificate resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Certificate Get(string name, Input id, CertificateState? state = null, CustomResourceOptions? options = null) + { + return new Certificate(name, id, state, options); + } + } + + public sealed class CertificateArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether Dokploy should renew this certificate automatically. + /// + [Input("autoRenew")] + public Input? AutoRenew { get; set; } + + /// + /// PEM-encoded certificate chain. + /// + [Input("certificateData", required: true)] + public Input CertificateData { get; set; } = null!; + + /// + /// Display name of the certificate. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("privateKey", required: true)] + private Input? _privateKey; + + /// + /// PEM-encoded private key. + /// + public Input? PrivateKey + { + get => _privateKey; + set + { + var emptySecret = Output.CreateSecret(0); + _privateKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Server this certificate is installed on. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + public CertificateArgs() + { + } + public static new CertificateArgs Empty => new CertificateArgs(); + } + + public sealed class CertificateState : global::Pulumi.ResourceArgs + { + /// + /// Whether Dokploy should renew this certificate automatically. + /// + [Input("autoRenew")] + public Input? AutoRenew { get; set; } + + /// + /// PEM-encoded certificate chain. + /// + [Input("certificateData")] + public Input? CertificateData { get; set; } + + /// + /// Path where Dokploy writes the certificate on disk. + /// + [Input("certificatePath")] + public Input? CertificatePath { get; set; } + + /// + /// Display name of the certificate. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("privateKey")] + private Input? _privateKey; + + /// + /// PEM-encoded private key. + /// + public Input? PrivateKey + { + get => _privateKey; + set + { + var emptySecret = Output.CreateSecret(0); + _privateKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Server this certificate is installed on. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + public CertificateState() + { + } + public static new CertificateState Empty => new CertificateState(); + } +} diff --git a/sdk/dotnet/Compose.cs b/sdk/dotnet/Compose.cs new file mode 100644 index 0000000..c7ee1b8 --- /dev/null +++ b/sdk/dotnet/Compose.cs @@ -0,0 +1,868 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/compose:Compose")] + public partial class Compose : global::Pulumi.CustomResource + { + /// + /// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Deploy automatically when the configured trigger fires. + /// + [Output("autoDeploy")] + public Output AutoDeploy { get; private set; } = null!; + + /// + /// Bitbucket branch to deploy. + /// + [Output("bitbucketBranch")] + public Output BitbucketBranch { get; private set; } = null!; + + /// + /// ID of the configured Bitbucket provider connection. + /// + [Output("bitbucketId")] + public Output BitbucketId { get; private set; } = null!; + + /// + /// Bitbucket repository owner. + /// + [Output("bitbucketOwner")] + public Output BitbucketOwner { get; private set; } = null!; + + /// + /// Bitbucket repository name. + /// + [Output("bitbucketRepository")] + public Output BitbucketRepository { get; private set; } = null!; + + /// + /// Bitbucket repository slug. + /// + [Output("bitbucketRepositorySlug")] + public Output BitbucketRepositorySlug { get; private set; } = null!; + + /// + /// GitHub branch to deploy. + /// + [Output("branch")] + public Output Branch { get; private set; } = null!; + + /// + /// Custom `docker compose` command to run. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Inline Compose file contents. Used when `SourceType` is `Raw`. + /// + [Output("composeFile")] + public Output ComposeFile { get; private set; } = null!; + + /// + /// Path to the Compose file within the repository. + /// + [Output("composePath")] + public Output ComposePath { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("composeStatus")] + public Output ComposeStatus { get; private set; } = null!; + + /// + /// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `Stack`. + /// + [Output("composeType")] + public Output ComposeType { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the stack was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Branch to deploy for a custom Git remote. + /// + [Output("customGitBranch")] + public Output CustomGitBranch { get; private set; } = null!; + + /// + /// SSH key used to clone a private custom Git remote. + /// + [Output("customGitSshKeyId")] + public Output CustomGitSshKeyId { get; private set; } = null!; + + /// + /// Git remote URL, when `SourceType` is `Git`. + /// + [Output("customGitUrl")] + public Output CustomGitUrl { get; private set; } = null!; + + /// + /// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `False`, which preserves the data. + /// + [Output("deleteVolumes")] + public Output DeleteVolumes { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Clone Git submodules when checking out the repository. + /// + [Output("enableSubmodules")] + public Output EnableSubmodules { get; private set; } = null!; + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this stack belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Gitea branch to deploy. + /// + [Output("giteaBranch")] + public Output GiteaBranch { get; private set; } = null!; + + /// + /// ID of the configured Gitea provider connection. + /// + [Output("giteaId")] + public Output GiteaId { get; private set; } = null!; + + /// + /// Gitea repository owner. + /// + [Output("giteaOwner")] + public Output GiteaOwner { get; private set; } = null!; + + /// + /// Gitea repository name. + /// + [Output("giteaRepository")] + public Output GiteaRepository { get; private set; } = null!; + + /// + /// ID of the configured GitHub provider connection. + /// + [Output("githubId")] + public Output GithubId { get; private set; } = null!; + + /// + /// GitLab branch to deploy. + /// + [Output("gitlabBranch")] + public Output GitlabBranch { get; private set; } = null!; + + /// + /// ID of the configured GitLab provider connection. + /// + [Output("gitlabId")] + public Output GitlabId { get; private set; } = null!; + + /// + /// GitLab repository owner. + /// + [Output("gitlabOwner")] + public Output GitlabOwner { get; private set; } = null!; + + /// + /// Full GitLab namespace path. + /// + [Output("gitlabPathNamespace")] + public Output GitlabPathNamespace { get; private set; } = null!; + + /// + /// Numeric GitLab project ID. + /// + [Output("gitlabProjectId")] + public Output GitlabProjectId { get; private set; } = null!; + + /// + /// GitLab repository name. + /// + [Output("gitlabRepository")] + public Output GitlabRepository { get; private set; } = null!; + + /// + /// Run the stack on its own isolated Docker network. + /// + [Output("isolatedDeployment")] + public Output IsolatedDeployment { get; private set; } = null!; + + /// + /// Prefix volume names for isolated deployments. Retained for backwards compatibility. + /// + [Output("isolatedDeploymentsVolume")] + public Output IsolatedDeploymentsVolume { get; private set; } = null!; + + /// + /// Display name of the stack. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// GitHub repository owner. + /// + [Output("owner")] + public Output Owner { get; private set; } = null!; + + /// + /// Append a random suffix to service and volume names. + /// + [Output("randomize")] + public Output Randomize { get; private set; } = null!; + + /// + /// GitHub repository name. + /// + [Output("repository")] + public Output Repository { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Where the Compose file comes from. Valid values: `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Raw`. + /// + [Output("sourceType")] + public Output SourceType { get; private set; } = null!; + + /// + /// Suffix appended to generated resource names. + /// + [Output("suffix")] + public Output Suffix { get; private set; } = null!; + + /// + /// What triggers an automatic deployment. Valid values: `Push`, `Tag`. + /// + [Output("triggerType")] + public Output TriggerType { get; private set; } = null!; + + /// + /// Glob patterns that limit which changed paths trigger an automatic deployment. + /// + [Output("watchPaths")] + public Output> WatchPaths { get; private set; } = null!; + + + /// + /// Create a Compose resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Compose(string name, ComposeArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/compose:Compose", name, args ?? new ComposeArgs(), MakeResourceOptions(options, "")) + { + } + + private Compose(string name, Input id, ComposeState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/compose:Compose", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Compose resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Compose Get(string name, Input id, ComposeState? state = null, CustomResourceOptions? options = null) + { + return new Compose(name, id, state, options); + } + } + + public sealed class ComposeArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Deploy automatically when the configured trigger fires. + /// + [Input("autoDeploy")] + public Input? AutoDeploy { get; set; } + + /// + /// Bitbucket branch to deploy. + /// + [Input("bitbucketBranch")] + public Input? BitbucketBranch { get; set; } + + /// + /// ID of the configured Bitbucket provider connection. + /// + [Input("bitbucketId")] + public Input? BitbucketId { get; set; } + + /// + /// Bitbucket repository owner. + /// + [Input("bitbucketOwner")] + public Input? BitbucketOwner { get; set; } + + /// + /// Bitbucket repository name. + /// + [Input("bitbucketRepository")] + public Input? BitbucketRepository { get; set; } + + /// + /// Bitbucket repository slug. + /// + [Input("bitbucketRepositorySlug")] + public Input? BitbucketRepositorySlug { get; set; } + + /// + /// GitHub branch to deploy. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// Custom `docker compose` command to run. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Inline Compose file contents. Used when `SourceType` is `Raw`. + /// + [Input("composeFile")] + public Input? ComposeFile { get; set; } + + /// + /// Path to the Compose file within the repository. + /// + [Input("composePath")] + public Input? ComposePath { get; set; } + + /// + /// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `Stack`. + /// + [Input("composeType")] + public Input? ComposeType { get; set; } + + /// + /// Branch to deploy for a custom Git remote. + /// + [Input("customGitBranch")] + public Input? CustomGitBranch { get; set; } + + /// + /// SSH key used to clone a private custom Git remote. + /// + [Input("customGitSshKeyId")] + public Input? CustomGitSshKeyId { get; set; } + + /// + /// Git remote URL, when `SourceType` is `Git`. + /// + [Input("customGitUrl")] + public Input? CustomGitUrl { get; set; } + + /// + /// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `False`, which preserves the data. + /// + [Input("deleteVolumes")] + public Input? DeleteVolumes { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Clone Git submodules when checking out the repository. + /// + [Input("enableSubmodules")] + public Input? EnableSubmodules { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this stack belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Gitea branch to deploy. + /// + [Input("giteaBranch")] + public Input? GiteaBranch { get; set; } + + /// + /// ID of the configured Gitea provider connection. + /// + [Input("giteaId")] + public Input? GiteaId { get; set; } + + /// + /// Gitea repository owner. + /// + [Input("giteaOwner")] + public Input? GiteaOwner { get; set; } + + /// + /// Gitea repository name. + /// + [Input("giteaRepository")] + public Input? GiteaRepository { get; set; } + + /// + /// ID of the configured GitHub provider connection. + /// + [Input("githubId")] + public Input? GithubId { get; set; } + + /// + /// GitLab branch to deploy. + /// + [Input("gitlabBranch")] + public Input? GitlabBranch { get; set; } + + /// + /// ID of the configured GitLab provider connection. + /// + [Input("gitlabId")] + public Input? GitlabId { get; set; } + + /// + /// GitLab repository owner. + /// + [Input("gitlabOwner")] + public Input? GitlabOwner { get; set; } + + /// + /// Full GitLab namespace path. + /// + [Input("gitlabPathNamespace")] + public Input? GitlabPathNamespace { get; set; } + + /// + /// Numeric GitLab project ID. + /// + [Input("gitlabProjectId")] + public Input? GitlabProjectId { get; set; } + + /// + /// GitLab repository name. + /// + [Input("gitlabRepository")] + public Input? GitlabRepository { get; set; } + + /// + /// Run the stack on its own isolated Docker network. + /// + [Input("isolatedDeployment")] + public Input? IsolatedDeployment { get; set; } + + /// + /// Prefix volume names for isolated deployments. Retained for backwards compatibility. + /// + [Input("isolatedDeploymentsVolume")] + public Input? IsolatedDeploymentsVolume { get; set; } + + /// + /// Display name of the stack. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// GitHub repository owner. + /// + [Input("owner")] + public Input? Owner { get; set; } + + /// + /// Append a random suffix to service and volume names. + /// + [Input("randomize")] + public Input? Randomize { get; set; } + + /// + /// GitHub repository name. + /// + [Input("repository")] + public Input? Repository { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Where the Compose file comes from. Valid values: `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Raw`. + /// + [Input("sourceType")] + public Input? SourceType { get; set; } + + /// + /// Suffix appended to generated resource names. + /// + [Input("suffix")] + public Input? Suffix { get; set; } + + /// + /// What triggers an automatic deployment. Valid values: `Push`, `Tag`. + /// + [Input("triggerType")] + public Input? TriggerType { get; set; } + + [Input("watchPaths")] + private InputList? _watchPaths; + + /// + /// Glob patterns that limit which changed paths trigger an automatic deployment. + /// + public InputList WatchPaths + { + get => _watchPaths ?? (_watchPaths = new InputList()); + set => _watchPaths = value; + } + + public ComposeArgs() + { + } + public static new ComposeArgs Empty => new ComposeArgs(); + } + + public sealed class ComposeState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Deploy automatically when the configured trigger fires. + /// + [Input("autoDeploy")] + public Input? AutoDeploy { get; set; } + + /// + /// Bitbucket branch to deploy. + /// + [Input("bitbucketBranch")] + public Input? BitbucketBranch { get; set; } + + /// + /// ID of the configured Bitbucket provider connection. + /// + [Input("bitbucketId")] + public Input? BitbucketId { get; set; } + + /// + /// Bitbucket repository owner. + /// + [Input("bitbucketOwner")] + public Input? BitbucketOwner { get; set; } + + /// + /// Bitbucket repository name. + /// + [Input("bitbucketRepository")] + public Input? BitbucketRepository { get; set; } + + /// + /// Bitbucket repository slug. + /// + [Input("bitbucketRepositorySlug")] + public Input? BitbucketRepositorySlug { get; set; } + + /// + /// GitHub branch to deploy. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// Custom `docker compose` command to run. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Inline Compose file contents. Used when `SourceType` is `Raw`. + /// + [Input("composeFile")] + public Input? ComposeFile { get; set; } + + /// + /// Path to the Compose file within the repository. + /// + [Input("composePath")] + public Input? ComposePath { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("composeStatus")] + public Input? ComposeStatus { get; set; } + + /// + /// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `Stack`. + /// + [Input("composeType")] + public Input? ComposeType { get; set; } + + /// + /// RFC 3339 timestamp of when the stack was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Branch to deploy for a custom Git remote. + /// + [Input("customGitBranch")] + public Input? CustomGitBranch { get; set; } + + /// + /// SSH key used to clone a private custom Git remote. + /// + [Input("customGitSshKeyId")] + public Input? CustomGitSshKeyId { get; set; } + + /// + /// Git remote URL, when `SourceType` is `Git`. + /// + [Input("customGitUrl")] + public Input? CustomGitUrl { get; set; } + + /// + /// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `False`, which preserves the data. + /// + [Input("deleteVolumes")] + public Input? DeleteVolumes { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Clone Git submodules when checking out the repository. + /// + [Input("enableSubmodules")] + public Input? EnableSubmodules { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this stack belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Gitea branch to deploy. + /// + [Input("giteaBranch")] + public Input? GiteaBranch { get; set; } + + /// + /// ID of the configured Gitea provider connection. + /// + [Input("giteaId")] + public Input? GiteaId { get; set; } + + /// + /// Gitea repository owner. + /// + [Input("giteaOwner")] + public Input? GiteaOwner { get; set; } + + /// + /// Gitea repository name. + /// + [Input("giteaRepository")] + public Input? GiteaRepository { get; set; } + + /// + /// ID of the configured GitHub provider connection. + /// + [Input("githubId")] + public Input? GithubId { get; set; } + + /// + /// GitLab branch to deploy. + /// + [Input("gitlabBranch")] + public Input? GitlabBranch { get; set; } + + /// + /// ID of the configured GitLab provider connection. + /// + [Input("gitlabId")] + public Input? GitlabId { get; set; } + + /// + /// GitLab repository owner. + /// + [Input("gitlabOwner")] + public Input? GitlabOwner { get; set; } + + /// + /// Full GitLab namespace path. + /// + [Input("gitlabPathNamespace")] + public Input? GitlabPathNamespace { get; set; } + + /// + /// Numeric GitLab project ID. + /// + [Input("gitlabProjectId")] + public Input? GitlabProjectId { get; set; } + + /// + /// GitLab repository name. + /// + [Input("gitlabRepository")] + public Input? GitlabRepository { get; set; } + + /// + /// Run the stack on its own isolated Docker network. + /// + [Input("isolatedDeployment")] + public Input? IsolatedDeployment { get; set; } + + /// + /// Prefix volume names for isolated deployments. Retained for backwards compatibility. + /// + [Input("isolatedDeploymentsVolume")] + public Input? IsolatedDeploymentsVolume { get; set; } + + /// + /// Display name of the stack. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// GitHub repository owner. + /// + [Input("owner")] + public Input? Owner { get; set; } + + /// + /// Append a random suffix to service and volume names. + /// + [Input("randomize")] + public Input? Randomize { get; set; } + + /// + /// GitHub repository name. + /// + [Input("repository")] + public Input? Repository { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Where the Compose file comes from. Valid values: `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Raw`. + /// + [Input("sourceType")] + public Input? SourceType { get; set; } + + /// + /// Suffix appended to generated resource names. + /// + [Input("suffix")] + public Input? Suffix { get; set; } + + /// + /// What triggers an automatic deployment. Valid values: `Push`, `Tag`. + /// + [Input("triggerType")] + public Input? TriggerType { get; set; } + + [Input("watchPaths")] + private InputList? _watchPaths; + + /// + /// Glob patterns that limit which changed paths trigger an automatic deployment. + /// + public InputList WatchPaths + { + get => _watchPaths ?? (_watchPaths = new InputList()); + set => _watchPaths = value; + } + + public ComposeState() + { + } + public static new ComposeState Empty => new ComposeState(); + } +} diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs new file mode 100644 index 0000000..788fa01 --- /dev/null +++ b/sdk/dotnet/Config/Config.cs @@ -0,0 +1,76 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Immutable; + +namespace Maxvojtkov.Dokploy +{ + public static class Config + { + [global::System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "IDE1006", Justification = + "Double underscore prefix used to avoid conflicts with variable names.")] + private sealed class __Value + { + private readonly Func _getter; + private T _value = default!; + private bool _set; + + public __Value(Func getter) + { + _getter = getter; + } + + public T Get() => _set ? _value : _getter(); + + public void Set(T value) + { + _value = value; + _set = true; + } + } + + private static readonly global::Pulumi.Config __config = new global::Pulumi.Config("dokploy"); + + private static readonly __Value _apiKey = new __Value(() => __config.Get("apiKey") ?? Utilities.GetEnv("DOKPLOY_API_KEY")); + /// + /// API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + /// + public static string? ApiKey + { + get => _apiKey.Get(); + set => _apiKey.Set(value); + } + + private static readonly __Value _host = new __Value(() => __config.Get("host") ?? Utilities.GetEnv("DOKPLOY_HOST")); + /// + /// Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + /// + public static string? Host + { + get => _host.Get(); + set => _host.Set(value); + } + + private static readonly __Value _insecureSkipVerify = new __Value(() => __config.GetBoolean("insecureSkipVerify")); + /// + /// Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `False`. + /// + public static bool? InsecureSkipVerify + { + get => _insecureSkipVerify.Get(); + set => _insecureSkipVerify.Set(value); + } + + private static readonly __Value _timeoutSeconds = new __Value(() => __config.GetInt32("timeoutSeconds") ?? Utilities.GetEnvInt32("DOKPLOY_TIMEOUT_SECONDS")); + /// + /// Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + /// + public static int? TimeoutSeconds + { + get => _timeoutSeconds.Get(); + set => _timeoutSeconds.Set(value); + } + + } +} diff --git a/sdk/dotnet/Config/README.md b/sdk/dotnet/Config/README.md new file mode 100644 index 0000000..994e6fb --- /dev/null +++ b/sdk/dotnet/Config/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Dokploy resources diff --git a/sdk/dotnet/Destination.cs b/sdk/dotnet/Destination.cs new file mode 100644 index 0000000..47ceaf5 --- /dev/null +++ b/sdk/dotnet/Destination.cs @@ -0,0 +1,286 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/destination:Destination")] + public partial class Destination : global::Pulumi.CustomResource + { + /// + /// S3 access key ID. + /// + [Output("accessKey")] + public Output AccessKey { get; private set; } = null!; + + /// + /// Extra flags passed to the underlying `Rclone` invocation. + /// + [Output("additionalFlags")] + public Output> AdditionalFlags { get; private set; } = null!; + + /// + /// Bucket name. + /// + [Output("bucket")] + public Output Bucket { get; private set; } = null!; + + /// + /// Timestamp of when the destination was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// S3 endpoint URL. + /// + [Output("endpoint")] + public Output Endpoint { get; private set; } = null!; + + /// + /// Display name of the destination. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Provider label, for example `S3` or `Cloudflare`. Named `ProviderName` because `Provider` is reserved by Terraform. + /// + [Output("providerName")] + public Output ProviderName { get; private set; } = null!; + + /// + /// Bucket region, for example `us-east-1`. + /// + [Output("region")] + public Output Region { get; private set; } = null!; + + /// + /// S3 secret access key. + /// + [Output("secretAccessKey")] + public Output SecretAccessKey { get; private set; } = null!; + + /// + /// Server this destination is scoped to. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + + /// + /// Create a Destination resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Destination(string name, DestinationArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/destination:Destination", name, args ?? new DestinationArgs(), MakeResourceOptions(options, "")) + { + } + + private Destination(string name, Input id, DestinationState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/destination:Destination", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "secretAccessKey", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Destination resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Destination Get(string name, Input id, DestinationState? state = null, CustomResourceOptions? options = null) + { + return new Destination(name, id, state, options); + } + } + + public sealed class DestinationArgs : global::Pulumi.ResourceArgs + { + /// + /// S3 access key ID. + /// + [Input("accessKey", required: true)] + public Input AccessKey { get; set; } = null!; + + [Input("additionalFlags")] + private InputList? _additionalFlags; + + /// + /// Extra flags passed to the underlying `Rclone` invocation. + /// + public InputList AdditionalFlags + { + get => _additionalFlags ?? (_additionalFlags = new InputList()); + set => _additionalFlags = value; + } + + /// + /// Bucket name. + /// + [Input("bucket", required: true)] + public Input Bucket { get; set; } = null!; + + /// + /// S3 endpoint URL. + /// + [Input("endpoint", required: true)] + public Input Endpoint { get; set; } = null!; + + /// + /// Display name of the destination. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Provider label, for example `S3` or `Cloudflare`. Named `ProviderName` because `Provider` is reserved by Terraform. + /// + [Input("providerName")] + public Input? ProviderName { get; set; } + + /// + /// Bucket region, for example `us-east-1`. + /// + [Input("region", required: true)] + public Input Region { get; set; } = null!; + + [Input("secretAccessKey", required: true)] + private Input? _secretAccessKey; + + /// + /// S3 secret access key. + /// + public Input? SecretAccessKey + { + get => _secretAccessKey; + set + { + var emptySecret = Output.CreateSecret(0); + _secretAccessKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Server this destination is scoped to. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + public DestinationArgs() + { + } + public static new DestinationArgs Empty => new DestinationArgs(); + } + + public sealed class DestinationState : global::Pulumi.ResourceArgs + { + /// + /// S3 access key ID. + /// + [Input("accessKey")] + public Input? AccessKey { get; set; } + + [Input("additionalFlags")] + private InputList? _additionalFlags; + + /// + /// Extra flags passed to the underlying `Rclone` invocation. + /// + public InputList AdditionalFlags + { + get => _additionalFlags ?? (_additionalFlags = new InputList()); + set => _additionalFlags = value; + } + + /// + /// Bucket name. + /// + [Input("bucket")] + public Input? Bucket { get; set; } + + /// + /// Timestamp of when the destination was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// S3 endpoint URL. + /// + [Input("endpoint")] + public Input? Endpoint { get; set; } + + /// + /// Display name of the destination. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Provider label, for example `S3` or `Cloudflare`. Named `ProviderName` because `Provider` is reserved by Terraform. + /// + [Input("providerName")] + public Input? ProviderName { get; set; } + + /// + /// Bucket region, for example `us-east-1`. + /// + [Input("region")] + public Input? Region { get; set; } + + [Input("secretAccessKey")] + private Input? _secretAccessKey; + + /// + /// S3 secret access key. + /// + public Input? SecretAccessKey + { + get => _secretAccessKey; + set + { + var emptySecret = Output.CreateSecret(0); + _secretAccessKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Server this destination is scoped to. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + public DestinationState() + { + } + public static new DestinationState Empty => new DestinationState(); + } +} diff --git a/sdk/dotnet/Domain.cs b/sdk/dotnet/Domain.cs new file mode 100644 index 0000000..f8189e3 --- /dev/null +++ b/sdk/dotnet/Domain.cs @@ -0,0 +1,388 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/domain:Domain")] + public partial class Domain : global::Pulumi.CustomResource + { + /// + /// Application this domain routes to. + /// + [Output("applicationId")] + public Output ApplicationId { get; private set; } = null!; + + /// + /// How TLS certificates are obtained. Use `Letsencrypt` for automatic certificates. Valid values: `Letsencrypt`, `None`, `Custom`. + /// + [Output("certificateType")] + public Output CertificateType { get; private set; } = null!; + + /// + /// Compose stack this domain routes to. + /// + [Output("composeId")] + public Output ComposeId { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the domain was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Traefik certificate resolver name, when `CertificateType` is `Custom`. + /// + [Output("customCertResolver")] + public Output CustomCertResolver { get; private set; } = null!; + + /// + /// Traefik entrypoint to bind, when not using the defaults. + /// + [Output("customEntrypoint")] + public Output CustomEntrypoint { get; private set; } = null!; + + /// + /// What kind of target this domain points at. Valid values: `Compose`, `Application`, `Preview`. + /// + [Output("domainType")] + public Output DomainType { get; private set; } = null!; + + /// + /// Protect this domain with Dokploy's forward auth. + /// + [Output("forwardAuthEnabled")] + public Output ForwardAuthEnabled { get; private set; } = null!; + + /// + /// Fully-qualified hostname, for example `api.example.com`. + /// + [Output("host")] + public Output Host { get; private set; } = null!; + + /// + /// Serve the domain over HTTPS and redirect HTTP traffic to it. + /// + [Output("https")] + public Output Https { get; private set; } = null!; + + /// + /// Path the request is rewritten to before it reaches the container, defaults to `/`. + /// + [Output("internalPath")] + public Output InternalPath { get; private set; } = null!; + + /// + /// Names of Traefik middlewares to apply. + /// + [Output("middlewares")] + public Output> Middlewares { get; private set; } = null!; + + /// + /// Path prefix this domain routes, defaults to `/`. + /// + [Output("path")] + public Output Path { get; private set; } = null!; + + /// + /// Container port that receives the traffic, defaults to `3000`. + /// + [Output("port")] + public Output Port { get; private set; } = null!; + + /// + /// Preview deployment this domain routes to. + /// + [Output("previewDeploymentId")] + public Output PreviewDeploymentId { get; private set; } = null!; + + /// + /// Name of the service inside a Compose stack that receives the traffic. Required when `ComposeId` is set. + /// + [Output("serviceName")] + public Output ServiceName { get; private set; } = null!; + + /// + /// Strip `Path` from the request before forwarding it. + /// + [Output("stripPath")] + public Output StripPath { get; private set; } = null!; + + + /// + /// Create a Domain resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Domain(string name, DomainArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/domain:Domain", name, args ?? new DomainArgs(), MakeResourceOptions(options, "")) + { + } + + private Domain(string name, Input id, DomainState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/domain:Domain", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Domain resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Domain Get(string name, Input id, DomainState? state = null, CustomResourceOptions? options = null) + { + return new Domain(name, id, state, options); + } + } + + public sealed class DomainArgs : global::Pulumi.ResourceArgs + { + /// + /// Application this domain routes to. + /// + [Input("applicationId")] + public Input? ApplicationId { get; set; } + + /// + /// How TLS certificates are obtained. Use `Letsencrypt` for automatic certificates. Valid values: `Letsencrypt`, `None`, `Custom`. + /// + [Input("certificateType")] + public Input? CertificateType { get; set; } + + /// + /// Compose stack this domain routes to. + /// + [Input("composeId")] + public Input? ComposeId { get; set; } + + /// + /// Traefik certificate resolver name, when `CertificateType` is `Custom`. + /// + [Input("customCertResolver")] + public Input? CustomCertResolver { get; set; } + + /// + /// Traefik entrypoint to bind, when not using the defaults. + /// + [Input("customEntrypoint")] + public Input? CustomEntrypoint { get; set; } + + /// + /// What kind of target this domain points at. Valid values: `Compose`, `Application`, `Preview`. + /// + [Input("domainType")] + public Input? DomainType { get; set; } + + /// + /// Protect this domain with Dokploy's forward auth. + /// + [Input("forwardAuthEnabled")] + public Input? ForwardAuthEnabled { get; set; } + + /// + /// Fully-qualified hostname, for example `api.example.com`. + /// + [Input("host", required: true)] + public Input Host { get; set; } = null!; + + /// + /// Serve the domain over HTTPS and redirect HTTP traffic to it. + /// + [Input("https")] + public Input? Https { get; set; } + + /// + /// Path the request is rewritten to before it reaches the container, defaults to `/`. + /// + [Input("internalPath")] + public Input? InternalPath { get; set; } + + [Input("middlewares")] + private InputList? _middlewares; + + /// + /// Names of Traefik middlewares to apply. + /// + public InputList Middlewares + { + get => _middlewares ?? (_middlewares = new InputList()); + set => _middlewares = value; + } + + /// + /// Path prefix this domain routes, defaults to `/`. + /// + [Input("path")] + public Input? Path { get; set; } + + /// + /// Container port that receives the traffic, defaults to `3000`. + /// + [Input("port")] + public Input? Port { get; set; } + + /// + /// Preview deployment this domain routes to. + /// + [Input("previewDeploymentId")] + public Input? PreviewDeploymentId { get; set; } + + /// + /// Name of the service inside a Compose stack that receives the traffic. Required when `ComposeId` is set. + /// + [Input("serviceName")] + public Input? ServiceName { get; set; } + + /// + /// Strip `Path` from the request before forwarding it. + /// + [Input("stripPath")] + public Input? StripPath { get; set; } + + public DomainArgs() + { + } + public static new DomainArgs Empty => new DomainArgs(); + } + + public sealed class DomainState : global::Pulumi.ResourceArgs + { + /// + /// Application this domain routes to. + /// + [Input("applicationId")] + public Input? ApplicationId { get; set; } + + /// + /// How TLS certificates are obtained. Use `Letsencrypt` for automatic certificates. Valid values: `Letsencrypt`, `None`, `Custom`. + /// + [Input("certificateType")] + public Input? CertificateType { get; set; } + + /// + /// Compose stack this domain routes to. + /// + [Input("composeId")] + public Input? ComposeId { get; set; } + + /// + /// RFC 3339 timestamp of when the domain was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Traefik certificate resolver name, when `CertificateType` is `Custom`. + /// + [Input("customCertResolver")] + public Input? CustomCertResolver { get; set; } + + /// + /// Traefik entrypoint to bind, when not using the defaults. + /// + [Input("customEntrypoint")] + public Input? CustomEntrypoint { get; set; } + + /// + /// What kind of target this domain points at. Valid values: `Compose`, `Application`, `Preview`. + /// + [Input("domainType")] + public Input? DomainType { get; set; } + + /// + /// Protect this domain with Dokploy's forward auth. + /// + [Input("forwardAuthEnabled")] + public Input? ForwardAuthEnabled { get; set; } + + /// + /// Fully-qualified hostname, for example `api.example.com`. + /// + [Input("host")] + public Input? Host { get; set; } + + /// + /// Serve the domain over HTTPS and redirect HTTP traffic to it. + /// + [Input("https")] + public Input? Https { get; set; } + + /// + /// Path the request is rewritten to before it reaches the container, defaults to `/`. + /// + [Input("internalPath")] + public Input? InternalPath { get; set; } + + [Input("middlewares")] + private InputList? _middlewares; + + /// + /// Names of Traefik middlewares to apply. + /// + public InputList Middlewares + { + get => _middlewares ?? (_middlewares = new InputList()); + set => _middlewares = value; + } + + /// + /// Path prefix this domain routes, defaults to `/`. + /// + [Input("path")] + public Input? Path { get; set; } + + /// + /// Container port that receives the traffic, defaults to `3000`. + /// + [Input("port")] + public Input? Port { get; set; } + + /// + /// Preview deployment this domain routes to. + /// + [Input("previewDeploymentId")] + public Input? PreviewDeploymentId { get; set; } + + /// + /// Name of the service inside a Compose stack that receives the traffic. Required when `ComposeId` is set. + /// + [Input("serviceName")] + public Input? ServiceName { get; set; } + + /// + /// Strip `Path` from the request before forwarding it. + /// + [Input("stripPath")] + public Input? StripPath { get; set; } + + public DomainState() + { + } + public static new DomainState Empty => new DomainState(); + } +} diff --git a/sdk/dotnet/Environment.cs b/sdk/dotnet/Environment.cs new file mode 100644 index 0000000..5f8ec89 --- /dev/null +++ b/sdk/dotnet/Environment.cs @@ -0,0 +1,172 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/environment:Environment")] + public partial class Environment : global::Pulumi.CustomResource + { + /// + /// RFC 3339 timestamp of when the environment was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Whether this is the project's default environment. + /// + [Output("isDefault")] + public Output IsDefault { get; private set; } = null!; + + /// + /// Environment name, for example `Staging`. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Project this environment belongs to. + /// + [Output("projectId")] + public Output ProjectId { get; private set; } = null!; + + + /// + /// Create a Environment resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Environment(string name, EnvironmentArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/environment:Environment", name, args ?? new EnvironmentArgs(), MakeResourceOptions(options, "")) + { + } + + private Environment(string name, Input id, EnvironmentState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/environment:Environment", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Environment resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Environment Get(string name, Input id, EnvironmentState? state = null, CustomResourceOptions? options = null) + { + return new Environment(name, id, state, options); + } + } + + public sealed class EnvironmentArgs : global::Pulumi.ResourceArgs + { + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment name, for example `Staging`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Project this environment belongs to. + /// + [Input("projectId", required: true)] + public Input ProjectId { get; set; } = null!; + + public EnvironmentArgs() + { + } + public static new EnvironmentArgs Empty => new EnvironmentArgs(); + } + + public sealed class EnvironmentState : global::Pulumi.ResourceArgs + { + /// + /// RFC 3339 timestamp of when the environment was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Whether this is the project's default environment. + /// + [Input("isDefault")] + public Input? IsDefault { get; set; } + + /// + /// Environment name, for example `Staging`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Project this environment belongs to. + /// + [Input("projectId")] + public Input? ProjectId { get; set; } + + public EnvironmentState() + { + } + public static new EnvironmentState Empty => new EnvironmentState(); + } +} diff --git a/sdk/dotnet/GetApplication.cs b/sdk/dotnet/GetApplication.cs new file mode 100644 index 0000000..b81000b --- /dev/null +++ b/sdk/dotnet/GetApplication.cs @@ -0,0 +1,93 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + public static class GetApplication + { + public static Task InvokeAsync(GetApplicationArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("dokploy:index/getApplication:getApplication", args ?? new GetApplicationArgs(), options.WithDefaults()); + + public static Output Invoke(GetApplicationInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getApplication:getApplication", args ?? new GetApplicationInvokeArgs(), options.WithDefaults()); + + public static Output Invoke(GetApplicationInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getApplication:getApplication", args ?? new GetApplicationInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetApplicationArgs : global::Pulumi.InvokeArgs + { + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetApplicationArgs() + { + } + public static new GetApplicationArgs Empty => new GetApplicationArgs(); + } + + public sealed class GetApplicationInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetApplicationInvokeArgs() + { + } + public static new GetApplicationInvokeArgs Empty => new GetApplicationInvokeArgs(); + } + + + [OutputType] + public sealed class GetApplicationResult + { + public readonly string AppName; + public readonly string ApplicationStatus; + public readonly string BuildType; + public readonly string CreatedAt; + public readonly string Description; + public readonly string EnvironmentId; + public readonly string Id; + public readonly string Name; + public readonly string SourceType; + + [OutputConstructor] + private GetApplicationResult( + string appName, + + string applicationStatus, + + string buildType, + + string createdAt, + + string description, + + string environmentId, + + string id, + + string name, + + string sourceType) + { + AppName = appName; + ApplicationStatus = applicationStatus; + BuildType = buildType; + CreatedAt = createdAt; + Description = description; + EnvironmentId = environmentId; + Id = id; + Name = name; + SourceType = sourceType; + } + } +} diff --git a/sdk/dotnet/GetEnvironment.cs b/sdk/dotnet/GetEnvironment.cs new file mode 100644 index 0000000..3a43779 --- /dev/null +++ b/sdk/dotnet/GetEnvironment.cs @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + public static class GetEnvironment + { + public static Task InvokeAsync(GetEnvironmentArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("dokploy:index/getEnvironment:getEnvironment", args ?? new GetEnvironmentArgs(), options.WithDefaults()); + + public static Output Invoke(GetEnvironmentInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getEnvironment:getEnvironment", args ?? new GetEnvironmentInvokeArgs(), options.WithDefaults()); + + public static Output Invoke(GetEnvironmentInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getEnvironment:getEnvironment", args ?? new GetEnvironmentInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetEnvironmentArgs : global::Pulumi.InvokeArgs + { + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetEnvironmentArgs() + { + } + public static new GetEnvironmentArgs Empty => new GetEnvironmentArgs(); + } + + public sealed class GetEnvironmentInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetEnvironmentInvokeArgs() + { + } + public static new GetEnvironmentInvokeArgs Empty => new GetEnvironmentInvokeArgs(); + } + + + [OutputType] + public sealed class GetEnvironmentResult + { + public readonly string CreatedAt; + public readonly string Description; + public readonly string Env; + public readonly string Id; + public readonly bool IsDefault; + public readonly string Name; + public readonly string ProjectId; + + [OutputConstructor] + private GetEnvironmentResult( + string createdAt, + + string description, + + string env, + + string id, + + bool isDefault, + + string name, + + string projectId) + { + CreatedAt = createdAt; + Description = description; + Env = env; + Id = id; + IsDefault = isDefault; + Name = name; + ProjectId = projectId; + } + } +} diff --git a/sdk/dotnet/GetProject.cs b/sdk/dotnet/GetProject.cs new file mode 100644 index 0000000..95d0477 --- /dev/null +++ b/sdk/dotnet/GetProject.cs @@ -0,0 +1,89 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + public static class GetProject + { + public static Task InvokeAsync(GetProjectArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("dokploy:index/getProject:getProject", args ?? new GetProjectArgs(), options.WithDefaults()); + + public static Output Invoke(GetProjectInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getProject:getProject", args ?? new GetProjectInvokeArgs(), options.WithDefaults()); + + public static Output Invoke(GetProjectInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getProject:getProject", args ?? new GetProjectInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetProjectArgs : global::Pulumi.InvokeArgs + { + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetProjectArgs() + { + } + public static new GetProjectArgs Empty => new GetProjectArgs(); + } + + public sealed class GetProjectInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetProjectInvokeArgs() + { + } + public static new GetProjectInvokeArgs Empty => new GetProjectInvokeArgs(); + } + + + [OutputType] + public sealed class GetProjectResult + { + public readonly string CreatedAt; + public readonly string DefaultEnvironmentId; + public readonly string Description; + public readonly string Env; + public readonly ImmutableArray Environments; + public readonly string Id; + public readonly string Name; + public readonly string OrganizationId; + + [OutputConstructor] + private GetProjectResult( + string createdAt, + + string defaultEnvironmentId, + + string description, + + string env, + + ImmutableArray environments, + + string id, + + string name, + + string organizationId) + { + CreatedAt = createdAt; + DefaultEnvironmentId = defaultEnvironmentId; + Description = description; + Env = env; + Environments = environments; + Id = id; + Name = name; + OrganizationId = organizationId; + } + } +} diff --git a/sdk/dotnet/GetProjects.cs b/sdk/dotnet/GetProjects.cs new file mode 100644 index 0000000..49c0dbe --- /dev/null +++ b/sdk/dotnet/GetProjects.cs @@ -0,0 +1,37 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + public static class GetProjects + { + public static Task InvokeAsync(InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("dokploy:index/getProjects:getProjects", InvokeArgs.Empty, options.WithDefaults()); + + public static Output Invoke(InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getProjects:getProjects", InvokeArgs.Empty, options.WithDefaults()); + + public static Output Invoke(InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getProjects:getProjects", InvokeArgs.Empty, options.WithDefaults()); + } + + + [OutputType] + public sealed class GetProjectsResult + { + public readonly ImmutableArray Projects; + + [OutputConstructor] + private GetProjectsResult(ImmutableArray projects) + { + Projects = projects; + } + } +} diff --git a/sdk/dotnet/GetServers.cs b/sdk/dotnet/GetServers.cs new file mode 100644 index 0000000..183a01c --- /dev/null +++ b/sdk/dotnet/GetServers.cs @@ -0,0 +1,37 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + public static class GetServers + { + public static Task InvokeAsync(InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("dokploy:index/getServers:getServers", InvokeArgs.Empty, options.WithDefaults()); + + public static Output Invoke(InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getServers:getServers", InvokeArgs.Empty, options.WithDefaults()); + + public static Output Invoke(InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("dokploy:index/getServers:getServers", InvokeArgs.Empty, options.WithDefaults()); + } + + + [OutputType] + public sealed class GetServersResult + { + public readonly ImmutableArray Servers; + + [OutputConstructor] + private GetServersResult(ImmutableArray servers) + { + Servers = servers; + } + } +} diff --git a/sdk/dotnet/LICENSE b/sdk/dotnet/LICENSE new file mode 100644 index 0000000..77ea901 --- /dev/null +++ b/sdk/dotnet/LICENSE @@ -0,0 +1,356 @@ +Copyright (c) 2026 Max Vojtkov + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + diff --git a/sdk/dotnet/MariaDb.cs b/sdk/dotnet/MariaDb.cs new file mode 100644 index 0000000..f80a62d --- /dev/null +++ b/sdk/dotnet/MariaDb.cs @@ -0,0 +1,745 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/mariaDb:MariaDb")] + public partial class MariaDb : global::Pulumi.CustomResource + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("applicationStatus")] + public Output ApplicationStatus { get; private set; } = null!; + + /// + /// Arguments appended to the container command. + /// + [Output("args")] + public Output> Args { get; private set; } = null!; + + /// + /// Override the container entrypoint command. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Hard CPU limit, for example `1`. + /// + [Output("cpuLimit")] + public Output CpuLimit { get; private set; } = null!; + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Output("cpuReservation")] + public Output CpuReservation { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Name of the database to create. + /// + [Output("databaseName")] + public Output DatabaseName { get; private set; } = null!; + + /// + /// Password for the database user. + /// + [Output("databasePassword")] + public Output DatabasePassword { get; private set; } = null!; + + /// + /// Password for the MariaDB `Root` user. + /// + [Output("databaseRootPassword")] + public Output DatabaseRootPassword { get; private set; } = null!; + + /// + /// Database user to create. + /// + [Output("databaseUser")] + public Output DatabaseUser { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Output("detachDokployNetwork")] + public Output DetachDokployNetwork { get; private set; } = null!; + + /// + /// MariaDB image to run, for example `mariadb:11`. + /// + [Output("dockerImage")] + public Output DockerImage { get; private set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Output("endpointSpecSwarm")] + public Output EndpointSpecSwarm { get; private set; } = null!; + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this database belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Output("externalPort")] + public Output ExternalPort { get; private set; } = null!; + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Output("healthCheckSwarm")] + public Output HealthCheckSwarm { get; private set; } = null!; + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Output("labelsSwarm")] + public Output LabelsSwarm { get; private set; } = null!; + + /// + /// Hard memory limit, for example `512m`. + /// + [Output("memoryLimit")] + public Output MemoryLimit { get; private set; } = null!; + + /// + /// Soft memory reservation, for example `256m`. + /// + [Output("memoryReservation")] + public Output MemoryReservation { get; private set; } = null!; + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Output("modeSwarm")] + public Output ModeSwarm { get; private set; } = null!; + + /// + /// Display name of the database. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// IDs of additional Docker networks to attach. + /// + [Output("networkIds")] + public Output> NetworkIds { get; private set; } = null!; + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Output("networkSwarm")] + public Output NetworkSwarm { get; private set; } = null!; + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Output("placementSwarm")] + public Output PlacementSwarm { get; private set; } = null!; + + /// + /// Number of replicas to run. + /// + [Output("replicas")] + public Output Replicas { get; private set; } = null!; + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Output("restartPolicySwarm")] + public Output RestartPolicySwarm { get; private set; } = null!; + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Output("rollbackConfigSwarm")] + public Output RollbackConfigSwarm { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Output("stopGracePeriodSwarm")] + public Output StopGracePeriodSwarm { get; private set; } = null!; + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Output("ulimitsSwarm")] + public Output UlimitsSwarm { get; private set; } = null!; + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Output("updateConfigSwarm")] + public Output UpdateConfigSwarm { get; private set; } = null!; + + + /// + /// Create a MariaDb resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public MariaDb(string name, MariaDbArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/mariaDb:MariaDb", name, args ?? new MariaDbArgs(), MakeResourceOptions(options, "")) + { + } + + private MariaDb(string name, Input id, MariaDbState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/mariaDb:MariaDb", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "databasePassword", + "databaseRootPassword", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing MariaDb resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static MariaDb Get(string name, Input id, MariaDbState? state = null, CustomResourceOptions? options = null) + { + return new MariaDb(name, id, state, options); + } + } + + public sealed class MariaDbArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// Name of the database to create. + /// + [Input("databaseName", required: true)] + public Input DatabaseName { get; set; } = null!; + + [Input("databasePassword", required: true)] + private Input? _databasePassword; + + /// + /// Password for the database user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("databaseRootPassword", required: true)] + private Input? _databaseRootPassword; + + /// + /// Password for the MariaDB `Root` user. + /// + public Input? DatabaseRootPassword + { + get => _databaseRootPassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databaseRootPassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Database user to create. + /// + [Input("databaseUser", required: true)] + public Input DatabaseUser { get; set; } = null!; + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// MariaDB image to run, for example `mariadb:11`. + /// + [Input("dockerImage", required: true)] + public Input DockerImage { get; set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public MariaDbArgs() + { + } + public static new MariaDbArgs Empty => new MariaDbArgs(); + } + + public sealed class MariaDbState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("applicationStatus")] + public Input? ApplicationStatus { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Name of the database to create. + /// + [Input("databaseName")] + public Input? DatabaseName { get; set; } + + [Input("databasePassword")] + private Input? _databasePassword; + + /// + /// Password for the database user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("databaseRootPassword")] + private Input? _databaseRootPassword; + + /// + /// Password for the MariaDB `Root` user. + /// + public Input? DatabaseRootPassword + { + get => _databaseRootPassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databaseRootPassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Database user to create. + /// + [Input("databaseUser")] + public Input? DatabaseUser { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// MariaDB image to run, for example `mariadb:11`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public MariaDbState() + { + } + public static new MariaDbState Empty => new MariaDbState(); + } +} diff --git a/sdk/dotnet/Maxvojtkov.Dokploy.csproj b/sdk/dotnet/Maxvojtkov.Dokploy.csproj new file mode 100644 index 0000000..d1202c6 --- /dev/null +++ b/sdk/dotnet/Maxvojtkov.Dokploy.csproj @@ -0,0 +1,61 @@ + + + + true + maxvojtkov + maxvojtkov + A Pulumi package for creating and managing Dokploy resources + MPL-2.0 + https://github.com/maxvojtkov/pulumi-dokploy + https://github.com/maxvojtkov/pulumi-dokploy + logo.png + 0.1.0 + + net6.0 + enable + + + + true + 1701;1702;1591 + + + + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + true + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + diff --git a/sdk/dotnet/Mongo.cs b/sdk/dotnet/Mongo.cs new file mode 100644 index 0000000..f8f5938 --- /dev/null +++ b/sdk/dotnet/Mongo.cs @@ -0,0 +1,706 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/mongo:Mongo")] + public partial class Mongo : global::Pulumi.CustomResource + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("applicationStatus")] + public Output ApplicationStatus { get; private set; } = null!; + + /// + /// Arguments appended to the container command. + /// + [Output("args")] + public Output> Args { get; private set; } = null!; + + /// + /// Override the container entrypoint command. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Hard CPU limit, for example `1`. + /// + [Output("cpuLimit")] + public Output CpuLimit { get; private set; } = null!; + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Output("cpuReservation")] + public Output CpuReservation { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Password for the root user. + /// + [Output("databasePassword")] + public Output DatabasePassword { get; private set; } = null!; + + /// + /// Root username to create. + /// + [Output("databaseUser")] + public Output DatabaseUser { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Output("detachDokployNetwork")] + public Output DetachDokployNetwork { get; private set; } = null!; + + /// + /// MongoDB image to run. Defaults to `mongo:8`. + /// + [Output("dockerImage")] + public Output DockerImage { get; private set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Output("endpointSpecSwarm")] + public Output EndpointSpecSwarm { get; private set; } = null!; + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this database belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Output("externalPort")] + public Output ExternalPort { get; private set; } = null!; + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Output("healthCheckSwarm")] + public Output HealthCheckSwarm { get; private set; } = null!; + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Output("labelsSwarm")] + public Output LabelsSwarm { get; private set; } = null!; + + /// + /// Hard memory limit, for example `512m`. + /// + [Output("memoryLimit")] + public Output MemoryLimit { get; private set; } = null!; + + /// + /// Soft memory reservation, for example `256m`. + /// + [Output("memoryReservation")] + public Output MemoryReservation { get; private set; } = null!; + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Output("modeSwarm")] + public Output ModeSwarm { get; private set; } = null!; + + /// + /// Display name of the database. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// IDs of additional Docker networks to attach. + /// + [Output("networkIds")] + public Output> NetworkIds { get; private set; } = null!; + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Output("networkSwarm")] + public Output NetworkSwarm { get; private set; } = null!; + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Output("placementSwarm")] + public Output PlacementSwarm { get; private set; } = null!; + + /// + /// Start the instance as a single-node replica set. + /// + [Output("replicaSets")] + public Output ReplicaSets { get; private set; } = null!; + + /// + /// Number of replicas to run. + /// + [Output("replicas")] + public Output Replicas { get; private set; } = null!; + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Output("restartPolicySwarm")] + public Output RestartPolicySwarm { get; private set; } = null!; + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Output("rollbackConfigSwarm")] + public Output RollbackConfigSwarm { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Output("stopGracePeriodSwarm")] + public Output StopGracePeriodSwarm { get; private set; } = null!; + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Output("ulimitsSwarm")] + public Output UlimitsSwarm { get; private set; } = null!; + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Output("updateConfigSwarm")] + public Output UpdateConfigSwarm { get; private set; } = null!; + + + /// + /// Create a Mongo resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Mongo(string name, MongoArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/mongo:Mongo", name, args ?? new MongoArgs(), MakeResourceOptions(options, "")) + { + } + + private Mongo(string name, Input id, MongoState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/mongo:Mongo", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "databasePassword", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Mongo resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Mongo Get(string name, Input id, MongoState? state = null, CustomResourceOptions? options = null) + { + return new Mongo(name, id, state, options); + } + } + + public sealed class MongoArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + [Input("databasePassword", required: true)] + private Input? _databasePassword; + + /// + /// Password for the root user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Root username to create. + /// + [Input("databaseUser", required: true)] + public Input DatabaseUser { get; set; } = null!; + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// MongoDB image to run. Defaults to `mongo:8`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Start the instance as a single-node replica set. + /// + [Input("replicaSets")] + public Input? ReplicaSets { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public MongoArgs() + { + } + public static new MongoArgs Empty => new MongoArgs(); + } + + public sealed class MongoState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("applicationStatus")] + public Input? ApplicationStatus { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + [Input("databasePassword")] + private Input? _databasePassword; + + /// + /// Password for the root user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Root username to create. + /// + [Input("databaseUser")] + public Input? DatabaseUser { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// MongoDB image to run. Defaults to `mongo:8`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Start the instance as a single-node replica set. + /// + [Input("replicaSets")] + public Input? ReplicaSets { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public MongoState() + { + } + public static new MongoState Empty => new MongoState(); + } +} diff --git a/sdk/dotnet/Mount.cs b/sdk/dotnet/Mount.cs new file mode 100644 index 0000000..9952396 --- /dev/null +++ b/sdk/dotnet/Mount.cs @@ -0,0 +1,220 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/mount:Mount")] + public partial class Mount : global::Pulumi.CustomResource + { + /// + /// Contents of the generated file, when `Type` is `File`. + /// + [Output("content")] + public Output Content { get; private set; } = null!; + + /// + /// Path of the generated file, when `Type` is `File`. + /// + [Output("filePath")] + public Output FilePath { get; private set; } = null!; + + /// + /// Path on the host, when `Type` is `Bind`. + /// + [Output("hostPath")] + public Output HostPath { get; private set; } = null!; + + /// + /// Path inside the container where the mount appears. + /// + [Output("mountPath")] + public Output MountPath { get; private set; } = null!; + + /// + /// ID of the service this mount attaches to. Must match `ServiceType` — an application ID, a compose ID, a postgres ID, and so on. + /// + [Output("serviceId")] + public Output ServiceId { get; private set; } = null!; + + /// + /// The kind of service this mount attaches to. Valid values: `Application`, `Postgres`, `Mysql`, `Mariadb`, `Mongo`, `Redis`, `Compose`. + /// + [Output("serviceType")] + public Output ServiceType { get; private set; } = null!; + + /// + /// The kind of mount to create. Valid values: `Bind`, `Volume`, `File`. + /// + [Output("type")] + public Output Type { get; private set; } = null!; + + /// + /// Name of the Docker volume, when `Type` is `Volume`. + /// + [Output("volumeName")] + public Output VolumeName { get; private set; } = null!; + + + /// + /// Create a Mount resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Mount(string name, MountArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/mount:Mount", name, args ?? new MountArgs(), MakeResourceOptions(options, "")) + { + } + + private Mount(string name, Input id, MountState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/mount:Mount", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Mount resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Mount Get(string name, Input id, MountState? state = null, CustomResourceOptions? options = null) + { + return new Mount(name, id, state, options); + } + } + + public sealed class MountArgs : global::Pulumi.ResourceArgs + { + /// + /// Contents of the generated file, when `Type` is `File`. + /// + [Input("content")] + public Input? Content { get; set; } + + /// + /// Path of the generated file, when `Type` is `File`. + /// + [Input("filePath")] + public Input? FilePath { get; set; } + + /// + /// Path on the host, when `Type` is `Bind`. + /// + [Input("hostPath")] + public Input? HostPath { get; set; } + + /// + /// Path inside the container where the mount appears. + /// + [Input("mountPath", required: true)] + public Input MountPath { get; set; } = null!; + + /// + /// ID of the service this mount attaches to. Must match `ServiceType` — an application ID, a compose ID, a postgres ID, and so on. + /// + [Input("serviceId", required: true)] + public Input ServiceId { get; set; } = null!; + + /// + /// The kind of service this mount attaches to. Valid values: `Application`, `Postgres`, `Mysql`, `Mariadb`, `Mongo`, `Redis`, `Compose`. + /// + [Input("serviceType", required: true)] + public Input ServiceType { get; set; } = null!; + + /// + /// The kind of mount to create. Valid values: `Bind`, `Volume`, `File`. + /// + [Input("type", required: true)] + public Input Type { get; set; } = null!; + + /// + /// Name of the Docker volume, when `Type` is `Volume`. + /// + [Input("volumeName")] + public Input? VolumeName { get; set; } + + public MountArgs() + { + } + public static new MountArgs Empty => new MountArgs(); + } + + public sealed class MountState : global::Pulumi.ResourceArgs + { + /// + /// Contents of the generated file, when `Type` is `File`. + /// + [Input("content")] + public Input? Content { get; set; } + + /// + /// Path of the generated file, when `Type` is `File`. + /// + [Input("filePath")] + public Input? FilePath { get; set; } + + /// + /// Path on the host, when `Type` is `Bind`. + /// + [Input("hostPath")] + public Input? HostPath { get; set; } + + /// + /// Path inside the container where the mount appears. + /// + [Input("mountPath")] + public Input? MountPath { get; set; } + + /// + /// ID of the service this mount attaches to. Must match `ServiceType` — an application ID, a compose ID, a postgres ID, and so on. + /// + [Input("serviceId")] + public Input? ServiceId { get; set; } + + /// + /// The kind of service this mount attaches to. Valid values: `Application`, `Postgres`, `Mysql`, `Mariadb`, `Mongo`, `Redis`, `Compose`. + /// + [Input("serviceType")] + public Input? ServiceType { get; set; } + + /// + /// The kind of mount to create. Valid values: `Bind`, `Volume`, `File`. + /// + [Input("type")] + public Input? Type { get; set; } + + /// + /// Name of the Docker volume, when `Type` is `Volume`. + /// + [Input("volumeName")] + public Input? VolumeName { get; set; } + + public MountState() + { + } + public static new MountState Empty => new MountState(); + } +} diff --git a/sdk/dotnet/MySql.cs b/sdk/dotnet/MySql.cs new file mode 100644 index 0000000..52e85eb --- /dev/null +++ b/sdk/dotnet/MySql.cs @@ -0,0 +1,745 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/mySql:MySql")] + public partial class MySql : global::Pulumi.CustomResource + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("applicationStatus")] + public Output ApplicationStatus { get; private set; } = null!; + + /// + /// Arguments appended to the container command. + /// + [Output("args")] + public Output> Args { get; private set; } = null!; + + /// + /// Override the container entrypoint command. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Hard CPU limit, for example `1`. + /// + [Output("cpuLimit")] + public Output CpuLimit { get; private set; } = null!; + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Output("cpuReservation")] + public Output CpuReservation { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Name of the database to create. + /// + [Output("databaseName")] + public Output DatabaseName { get; private set; } = null!; + + /// + /// Password for the database user. + /// + [Output("databasePassword")] + public Output DatabasePassword { get; private set; } = null!; + + /// + /// Password for the MySQL `Root` user. + /// + [Output("databaseRootPassword")] + public Output DatabaseRootPassword { get; private set; } = null!; + + /// + /// Database user to create. + /// + [Output("databaseUser")] + public Output DatabaseUser { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Output("detachDokployNetwork")] + public Output DetachDokployNetwork { get; private set; } = null!; + + /// + /// MySQL image to run, for example `mysql:8`. + /// + [Output("dockerImage")] + public Output DockerImage { get; private set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Output("endpointSpecSwarm")] + public Output EndpointSpecSwarm { get; private set; } = null!; + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this database belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Output("externalPort")] + public Output ExternalPort { get; private set; } = null!; + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Output("healthCheckSwarm")] + public Output HealthCheckSwarm { get; private set; } = null!; + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Output("labelsSwarm")] + public Output LabelsSwarm { get; private set; } = null!; + + /// + /// Hard memory limit, for example `512m`. + /// + [Output("memoryLimit")] + public Output MemoryLimit { get; private set; } = null!; + + /// + /// Soft memory reservation, for example `256m`. + /// + [Output("memoryReservation")] + public Output MemoryReservation { get; private set; } = null!; + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Output("modeSwarm")] + public Output ModeSwarm { get; private set; } = null!; + + /// + /// Display name of the database. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// IDs of additional Docker networks to attach. + /// + [Output("networkIds")] + public Output> NetworkIds { get; private set; } = null!; + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Output("networkSwarm")] + public Output NetworkSwarm { get; private set; } = null!; + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Output("placementSwarm")] + public Output PlacementSwarm { get; private set; } = null!; + + /// + /// Number of replicas to run. + /// + [Output("replicas")] + public Output Replicas { get; private set; } = null!; + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Output("restartPolicySwarm")] + public Output RestartPolicySwarm { get; private set; } = null!; + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Output("rollbackConfigSwarm")] + public Output RollbackConfigSwarm { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Output("stopGracePeriodSwarm")] + public Output StopGracePeriodSwarm { get; private set; } = null!; + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Output("ulimitsSwarm")] + public Output UlimitsSwarm { get; private set; } = null!; + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Output("updateConfigSwarm")] + public Output UpdateConfigSwarm { get; private set; } = null!; + + + /// + /// Create a MySql resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public MySql(string name, MySqlArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/mySql:MySql", name, args ?? new MySqlArgs(), MakeResourceOptions(options, "")) + { + } + + private MySql(string name, Input id, MySqlState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/mySql:MySql", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "databasePassword", + "databaseRootPassword", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing MySql resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static MySql Get(string name, Input id, MySqlState? state = null, CustomResourceOptions? options = null) + { + return new MySql(name, id, state, options); + } + } + + public sealed class MySqlArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// Name of the database to create. + /// + [Input("databaseName", required: true)] + public Input DatabaseName { get; set; } = null!; + + [Input("databasePassword", required: true)] + private Input? _databasePassword; + + /// + /// Password for the database user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("databaseRootPassword", required: true)] + private Input? _databaseRootPassword; + + /// + /// Password for the MySQL `Root` user. + /// + public Input? DatabaseRootPassword + { + get => _databaseRootPassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databaseRootPassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Database user to create. + /// + [Input("databaseUser", required: true)] + public Input DatabaseUser { get; set; } = null!; + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// MySQL image to run, for example `mysql:8`. + /// + [Input("dockerImage", required: true)] + public Input DockerImage { get; set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public MySqlArgs() + { + } + public static new MySqlArgs Empty => new MySqlArgs(); + } + + public sealed class MySqlState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("applicationStatus")] + public Input? ApplicationStatus { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Name of the database to create. + /// + [Input("databaseName")] + public Input? DatabaseName { get; set; } + + [Input("databasePassword")] + private Input? _databasePassword; + + /// + /// Password for the database user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("databaseRootPassword")] + private Input? _databaseRootPassword; + + /// + /// Password for the MySQL `Root` user. + /// + public Input? DatabaseRootPassword + { + get => _databaseRootPassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databaseRootPassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Database user to create. + /// + [Input("databaseUser")] + public Input? DatabaseUser { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// MySQL image to run, for example `mysql:8`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public MySqlState() + { + } + public static new MySqlState Empty => new MySqlState(); + } +} diff --git a/sdk/dotnet/Outputs/GetProjectEnvironmentResult.cs b/sdk/dotnet/Outputs/GetProjectEnvironmentResult.cs new file mode 100644 index 0000000..2d710f4 --- /dev/null +++ b/sdk/dotnet/Outputs/GetProjectEnvironmentResult.cs @@ -0,0 +1,34 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy.Outputs +{ + + [OutputType] + public sealed class GetProjectEnvironmentResult + { + public readonly string Id; + public readonly bool IsDefault; + public readonly string Name; + + [OutputConstructor] + private GetProjectEnvironmentResult( + string id, + + bool isDefault, + + string name) + { + Id = id; + IsDefault = isDefault; + Name = name; + } + } +} diff --git a/sdk/dotnet/Outputs/GetProjectsProjectResult.cs b/sdk/dotnet/Outputs/GetProjectsProjectResult.cs new file mode 100644 index 0000000..49b808a --- /dev/null +++ b/sdk/dotnet/Outputs/GetProjectsProjectResult.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy.Outputs +{ + + [OutputType] + public sealed class GetProjectsProjectResult + { + public readonly string DefaultEnvironmentId; + public readonly string Description; + public readonly string Id; + public readonly string Name; + + [OutputConstructor] + private GetProjectsProjectResult( + string defaultEnvironmentId, + + string description, + + string id, + + string name) + { + DefaultEnvironmentId = defaultEnvironmentId; + Description = description; + Id = id; + Name = name; + } + } +} diff --git a/sdk/dotnet/Outputs/GetServersServerResult.cs b/sdk/dotnet/Outputs/GetServersServerResult.cs new file mode 100644 index 0000000..b57cfd8 --- /dev/null +++ b/sdk/dotnet/Outputs/GetServersServerResult.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy.Outputs +{ + + [OutputType] + public sealed class GetServersServerResult + { + public readonly string Id; + public readonly string IpAddress; + public readonly string Name; + public readonly string ServerStatus; + + [OutputConstructor] + private GetServersServerResult( + string id, + + string ipAddress, + + string name, + + string serverStatus) + { + Id = id; + IpAddress = ipAddress; + Name = name; + ServerStatus = serverStatus; + } + } +} diff --git a/sdk/dotnet/Port.cs b/sdk/dotnet/Port.cs new file mode 100644 index 0000000..5038380 --- /dev/null +++ b/sdk/dotnet/Port.cs @@ -0,0 +1,166 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/port:Port")] + public partial class Port : global::Pulumi.CustomResource + { + /// + /// Application this port belongs to. + /// + [Output("applicationId")] + public Output ApplicationId { get; private set; } = null!; + + /// + /// Transport protocol. Valid values: `Tcp`, `Udp`. + /// + [Output("protocol")] + public Output Protocol { get; private set; } = null!; + + /// + /// Docker Swarm publish mode. `Host` binds directly to the node; `Ingress` uses the swarm routing mesh. Valid values: `Ingress`, `Host`. + /// + [Output("publishMode")] + public Output PublishMode { get; private set; } = null!; + + /// + /// Port exposed on the host. + /// + [Output("publishedPort")] + public Output PublishedPort { get; private set; } = null!; + + /// + /// Port the container listens on. + /// + [Output("targetPort")] + public Output TargetPort { get; private set; } = null!; + + + /// + /// Create a Port resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Port(string name, PortArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/port:Port", name, args ?? new PortArgs(), MakeResourceOptions(options, "")) + { + } + + private Port(string name, Input id, PortState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/port:Port", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Port resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Port Get(string name, Input id, PortState? state = null, CustomResourceOptions? options = null) + { + return new Port(name, id, state, options); + } + } + + public sealed class PortArgs : global::Pulumi.ResourceArgs + { + /// + /// Application this port belongs to. + /// + [Input("applicationId", required: true)] + public Input ApplicationId { get; set; } = null!; + + /// + /// Transport protocol. Valid values: `Tcp`, `Udp`. + /// + [Input("protocol", required: true)] + public Input Protocol { get; set; } = null!; + + /// + /// Docker Swarm publish mode. `Host` binds directly to the node; `Ingress` uses the swarm routing mesh. Valid values: `Ingress`, `Host`. + /// + [Input("publishMode")] + public Input? PublishMode { get; set; } + + /// + /// Port exposed on the host. + /// + [Input("publishedPort", required: true)] + public Input PublishedPort { get; set; } = null!; + + /// + /// Port the container listens on. + /// + [Input("targetPort", required: true)] + public Input TargetPort { get; set; } = null!; + + public PortArgs() + { + } + public static new PortArgs Empty => new PortArgs(); + } + + public sealed class PortState : global::Pulumi.ResourceArgs + { + /// + /// Application this port belongs to. + /// + [Input("applicationId")] + public Input? ApplicationId { get; set; } + + /// + /// Transport protocol. Valid values: `Tcp`, `Udp`. + /// + [Input("protocol")] + public Input? Protocol { get; set; } + + /// + /// Docker Swarm publish mode. `Host` binds directly to the node; `Ingress` uses the swarm routing mesh. Valid values: `Ingress`, `Host`. + /// + [Input("publishMode")] + public Input? PublishMode { get; set; } + + /// + /// Port exposed on the host. + /// + [Input("publishedPort")] + public Input? PublishedPort { get; set; } + + /// + /// Port the container listens on. + /// + [Input("targetPort")] + public Input? TargetPort { get; set; } + + public PortState() + { + } + public static new PortState Empty => new PortState(); + } +} diff --git a/sdk/dotnet/Postgres.cs b/sdk/dotnet/Postgres.cs new file mode 100644 index 0000000..5f0330f --- /dev/null +++ b/sdk/dotnet/Postgres.cs @@ -0,0 +1,706 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/postgres:Postgres")] + public partial class Postgres : global::Pulumi.CustomResource + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("applicationStatus")] + public Output ApplicationStatus { get; private set; } = null!; + + /// + /// Arguments appended to the container command. + /// + [Output("args")] + public Output> Args { get; private set; } = null!; + + /// + /// Override the container entrypoint command. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Hard CPU limit, for example `1`. + /// + [Output("cpuLimit")] + public Output CpuLimit { get; private set; } = null!; + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Output("cpuReservation")] + public Output CpuReservation { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Name of the database to create. + /// + [Output("databaseName")] + public Output DatabaseName { get; private set; } = null!; + + /// + /// Password for the database user. + /// + [Output("databasePassword")] + public Output DatabasePassword { get; private set; } = null!; + + /// + /// Database user to create. + /// + [Output("databaseUser")] + public Output DatabaseUser { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Output("detachDokployNetwork")] + public Output DetachDokployNetwork { get; private set; } = null!; + + /// + /// PostgreSQL image to run, for example `postgres:16`. + /// + [Output("dockerImage")] + public Output DockerImage { get; private set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Output("endpointSpecSwarm")] + public Output EndpointSpecSwarm { get; private set; } = null!; + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this database belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Output("externalPort")] + public Output ExternalPort { get; private set; } = null!; + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Output("healthCheckSwarm")] + public Output HealthCheckSwarm { get; private set; } = null!; + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Output("labelsSwarm")] + public Output LabelsSwarm { get; private set; } = null!; + + /// + /// Hard memory limit, for example `512m`. + /// + [Output("memoryLimit")] + public Output MemoryLimit { get; private set; } = null!; + + /// + /// Soft memory reservation, for example `256m`. + /// + [Output("memoryReservation")] + public Output MemoryReservation { get; private set; } = null!; + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Output("modeSwarm")] + public Output ModeSwarm { get; private set; } = null!; + + /// + /// Display name of the database. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// IDs of additional Docker networks to attach. + /// + [Output("networkIds")] + public Output> NetworkIds { get; private set; } = null!; + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Output("networkSwarm")] + public Output NetworkSwarm { get; private set; } = null!; + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Output("placementSwarm")] + public Output PlacementSwarm { get; private set; } = null!; + + /// + /// Number of replicas to run. + /// + [Output("replicas")] + public Output Replicas { get; private set; } = null!; + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Output("restartPolicySwarm")] + public Output RestartPolicySwarm { get; private set; } = null!; + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Output("rollbackConfigSwarm")] + public Output RollbackConfigSwarm { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Output("stopGracePeriodSwarm")] + public Output StopGracePeriodSwarm { get; private set; } = null!; + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Output("ulimitsSwarm")] + public Output UlimitsSwarm { get; private set; } = null!; + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Output("updateConfigSwarm")] + public Output UpdateConfigSwarm { get; private set; } = null!; + + + /// + /// Create a Postgres resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Postgres(string name, PostgresArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/postgres:Postgres", name, args ?? new PostgresArgs(), MakeResourceOptions(options, "")) + { + } + + private Postgres(string name, Input id, PostgresState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/postgres:Postgres", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "databasePassword", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Postgres resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Postgres Get(string name, Input id, PostgresState? state = null, CustomResourceOptions? options = null) + { + return new Postgres(name, id, state, options); + } + } + + public sealed class PostgresArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// Name of the database to create. + /// + [Input("databaseName", required: true)] + public Input DatabaseName { get; set; } = null!; + + [Input("databasePassword", required: true)] + private Input? _databasePassword; + + /// + /// Password for the database user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Database user to create. + /// + [Input("databaseUser", required: true)] + public Input DatabaseUser { get; set; } = null!; + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// PostgreSQL image to run, for example `postgres:16`. + /// + [Input("dockerImage", required: true)] + public Input DockerImage { get; set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public PostgresArgs() + { + } + public static new PostgresArgs Empty => new PostgresArgs(); + } + + public sealed class PostgresState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("applicationStatus")] + public Input? ApplicationStatus { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Name of the database to create. + /// + [Input("databaseName")] + public Input? DatabaseName { get; set; } + + [Input("databasePassword")] + private Input? _databasePassword; + + /// + /// Password for the database user. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Database user to create. + /// + [Input("databaseUser")] + public Input? DatabaseUser { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// PostgreSQL image to run, for example `postgres:16`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public PostgresState() + { + } + public static new PostgresState Empty => new PostgresState(); + } +} diff --git a/sdk/dotnet/Project.cs b/sdk/dotnet/Project.cs new file mode 100644 index 0000000..62fbb7b --- /dev/null +++ b/sdk/dotnet/Project.cs @@ -0,0 +1,166 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/project:Project")] + public partial class Project : global::Pulumi.CustomResource + { + /// + /// RFC 3339 timestamp of when the project was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// ID of the `Production` environment that Dokploy creates automatically with the project. + /// + [Output("defaultEnvironmentId")] + public Output DefaultEnvironmentId { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Display name of the project. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Organization that owns the project. + /// + [Output("organizationId")] + public Output OrganizationId { get; private set; } = null!; + + + /// + /// Create a Project resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Project(string name, ProjectArgs? args = null, CustomResourceOptions? options = null) + : base("dokploy:index/project:Project", name, args ?? new ProjectArgs(), MakeResourceOptions(options, "")) + { + } + + private Project(string name, Input id, ProjectState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/project:Project", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Project resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Project Get(string name, Input id, ProjectState? state = null, CustomResourceOptions? options = null) + { + return new Project(name, id, state, options); + } + } + + public sealed class ProjectArgs : global::Pulumi.ResourceArgs + { + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Display name of the project. + /// + [Input("name")] + public Input? Name { get; set; } + + public ProjectArgs() + { + } + public static new ProjectArgs Empty => new ProjectArgs(); + } + + public sealed class ProjectState : global::Pulumi.ResourceArgs + { + /// + /// RFC 3339 timestamp of when the project was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// ID of the `Production` environment that Dokploy creates automatically with the project. + /// + [Input("defaultEnvironmentId")] + public Input? DefaultEnvironmentId { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Display name of the project. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Organization that owns the project. + /// + [Input("organizationId")] + public Input? OrganizationId { get; set; } + + public ProjectState() + { + } + public static new ProjectState Empty => new ProjectState(); + } +} diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs new file mode 100644 index 0000000..4d80ddc --- /dev/null +++ b/sdk/dotnet/Provider.cs @@ -0,0 +1,130 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + /// + /// The provider type for the dokploy package. By default, resources use package-wide configuration + /// settings, however an explicit `Provider` instance may be created and passed during resource + /// construction to achieve fine-grained programmatic control over provider settings. See the + /// [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + /// + [DokployResourceType("pulumi:providers:dokploy")] + public partial class Provider : global::Pulumi.ProviderResource + { + /// + /// API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + /// + [Output("apiKey")] + public Output ApiKey { get; private set; } = null!; + + /// + /// Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + /// + [Output("host")] + public Output Host { get; private set; } = null!; + + + /// + /// Create a Provider resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Provider(string name, ProviderArgs? args = null, CustomResourceOptions? options = null) + : base("dokploy", name, args ?? new ProviderArgs(), MakeResourceOptions(options, "")) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "apiKey", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + + /// + /// This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider. + /// + public global::Pulumi.Output TerraformConfig() + => global::Pulumi.Deployment.Instance.Call("pulumi:providers:dokploy/terraformConfig", CallArgs.Empty, this); + } + + public sealed class ProviderArgs : global::Pulumi.ResourceArgs + { + [Input("apiKey")] + private Input? _apiKey; + + /// + /// API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + /// + public Input? ApiKey + { + get => _apiKey; + set + { + var emptySecret = Output.CreateSecret(0); + _apiKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + /// + [Input("host")] + public Input? Host { get; set; } + + /// + /// Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `False`. + /// + [Input("insecureSkipVerify", json: true)] + public Input? InsecureSkipVerify { get; set; } + + /// + /// Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + /// + [Input("timeoutSeconds", json: true)] + public Input? TimeoutSeconds { get; set; } + + public ProviderArgs() + { + ApiKey = Utilities.GetEnv("DOKPLOY_API_KEY"); + Host = Utilities.GetEnv("DOKPLOY_HOST"); + TimeoutSeconds = Utilities.GetEnvInt32("DOKPLOY_TIMEOUT_SECONDS"); + } + public static new ProviderArgs Empty => new ProviderArgs(); + } + + /// + /// The results of the method. + /// + [OutputType] + public sealed class ProviderTerraformConfigResult + { + public readonly ImmutableDictionary Result; + + [OutputConstructor] + private ProviderTerraformConfigResult(ImmutableDictionary result) + { + Result = result; + } + } +} diff --git a/sdk/dotnet/Pulumi.yaml b/sdk/dotnet/Pulumi.yaml new file mode 100644 index 0000000..023f9b9 --- /dev/null +++ b/sdk/dotnet/Pulumi.yaml @@ -0,0 +1,3 @@ +name: dokploy +description: A Pulumi resource provider for dokploy. +language: dotnet diff --git a/sdk/dotnet/README.md b/sdk/dotnet/README.md new file mode 100644 index 0000000..e7dbe6e --- /dev/null +++ b/sdk/dotnet/README.md @@ -0,0 +1,206 @@ +# pulumi-dokploy + +A Pulumi provider for [Dokploy](https://dokploy.com): projects, environments, +applications, Compose stacks, managed databases, domains, mounts, ports, +redirects, basic auth, registries, SSH keys, certificates and backup +destinations. + +This is a *bridged* provider. All of the behaviour lives in +[`terraform-provider-dokploy`](https://github.com/maxvojtkov/terraform-provider-dokploy); +[`pulumi-terraform-bridge`](https://github.com/pulumi/pulumi-terraform-bridge) +turns it into a Pulumi package with typed SDKs for TypeScript, Python, Go and +.NET. The two providers stay in lockstep — a resource added upstream shows up +here after a `make tfgen`. + +```ts +import * as dokploy from "@maxvojtkov/pulumi-dokploy"; + +const shop = new dokploy.Project("shop", { name: "shop" }); + +const db = new dokploy.Postgres("db", { + name: "shop-db", + environmentId: shop.defaultEnvironmentId, + dockerImage: "postgres:16-alpine", + databaseName: "shop", + databaseUser: "shop", + databasePassword: dbPassword, +}); + +const api = new dokploy.Application("api", { + name: "api", + environmentId: shop.defaultEnvironmentId, + sourceType: "docker", + dockerImage: "ghcr.io/acme/api:1.4.0", + env: pulumi.interpolate`DATABASE_URL=postgresql://shop:${dbPassword}@${db.appName}:5432/shop`, +}); + +new dokploy.Domain("api", { + applicationId: api.id, + domainType: "application", + host: "api.example.com", + port: 3000, + https: true, + certificateType: "letsencrypt", +}); +``` + +## Contents + +- [Installing](#installing) +- [Configuration](#configuration) +- [Resources and data sources](#resources-and-data-sources) +- [Differences from the Terraform provider](#differences-from-the-terraform-provider) +- [Examples](#examples) +- [Development](#development) +- [Releasing](#releasing) + +## Installing + +The SDKs are published per language; the plugin binary is resolved +automatically from this repository's GitHub releases. + +```bash +# TypeScript / JavaScript +npm install @maxvojtkov/pulumi-dokploy + +# Python +pip install pulumi_dokploy + +# Go +go get github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy + +# .NET +dotnet add package Maxvojtkov.Dokploy +``` + +Before the first release, build and install it locally instead: + +```bash +make install VERSION=0.1.0 +``` + +That drops `pulumi-resource-dokploy` into the local plugin cache, so +`pulumi up` finds it without a network fetch. + +### Do I need the static SDK? + +Not necessarily. Pulumi can consume the Terraform provider directly, with no +build step and no published SDK: + +```bash +pulumi package add terraform-provider maxvojtkov/dokploy +``` + +That generates a local SDK on the spot and is the fastest way to try things. +Use this repository when you want a *versioned, published* package — stable +tokens across releases, real package-manager installs, and SDKs your teammates +can depend on without a codegen step. + +## Configuration + +| Setting | Environment variable | Required | Description | +| ---------------------- | ------------------------- | -------- | --------------------------------------------------------------------------- | +| `dokploy:host` | `DOKPLOY_HOST` | yes | Base URL of the instance, e.g. `https://dokploy.example.com`. Trailing `/api` optional. | +| `dokploy:apiKey` | `DOKPLOY_API_KEY` | yes | Token from *Settings → Profile → API/CLI*. Always treated as a secret. | +| `dokploy:timeoutSeconds` | `DOKPLOY_TIMEOUT_SECONDS` | no | Per-request timeout. Defaults to `60`. | +| `dokploy:insecureSkipVerify` | — | no | Skip TLS verification. Only for self-signed certificates. | + +```bash +pulumi config set dokploy:host https://dokploy.example.com +pulumi config set --secret dokploy:apiKey "$DOKPLOY_API_KEY" +``` + +## Resources and data sources + +| Group | Resources | +| ------------ | ------------------------------------------------------------------------- | +| Structure | `Project`, `Environment` | +| Services | `Application`, `Compose` | +| Databases | `Postgres`, `MySql`, `MariaDb`, `Mongo`, `Redis` | +| Networking | `Domain`, `Mount`, `Port`, `Redirect`, `Security` | +| Account | `Registry`, `SshKey`, `Certificate`, `Destination` | + +Data sources: `getProject`, `getProjects`, `getEnvironment`, `getApplication`, +`getServers`. + +## Differences from the Terraform provider + +Everything is a mechanical translation of the Terraform provider, with three +Pulumi conventions applied on top: + +- **Attribute names are camelCase.** `environment_id` → `environmentId`, + `default_environment_id` → `defaultEnvironmentId`, and so on. +- **`name` is auto-generated when you omit it.** Pulumi appends a random + suffix to the logical resource name, the same way the AWS provider does. Pass + `name` explicitly whenever the Dokploy-side name matters to you. +- **The `web-service` Terraform module has no direct equivalent.** Write it as + a [ComponentResource](https://www.pulumi.com/docs/concepts/resources/components/) + instead — see [`examples/typescript/webService.ts`](examples/typescript/webService.ts), + which is a port of that module. + +The [known API quirks](https://github.com/maxvojtkov/terraform-provider-dokploy#known-api-quirks) +documented upstream apply here unchanged, because it is the same code doing the +work. + +## Examples + +- [`examples/typescript`](examples/typescript) — a full environment: project, + staging environment, Postgres, Redis, a GitHub-built web service behind a + domain, a basic-auth-protected internal tool, and a Compose stack. +- [`examples/python`](examples/python) — a small project, database and app. + +## Development + +Requirements: Go 1.25+, Node 20+, Python 3.9+, .NET 8+, and `pulumi`. + +```bash +make tfgen # regenerate schema.json and bridge-metadata.json +make provider # build the plugin binary into bin/ +make build_sdks # regenerate all four SDKs +make install # install the plugin into the local Pulumi plugin cache +make lint test +``` + +`provider/resources.go` is the whole mapping layer: Terraform type names to +Pulumi tokens, and Terraform provider configuration to Pulumi configuration. +Adding an upstream resource means adding one line there and re-running +`make tfgen build_sdks`. + +### The upstream dependency + +`provider/go.mod` currently carries: + +``` +replace github.com/maxvojtkov/terraform-provider-dokploy => ../../dokploy-teraform +``` + +so the two repositories can be developed side by side. CI reproduces that +layout by checking the upstream provider out as a sibling directory. Once +`terraform-provider-dokploy` is tagged on GitHub, drop the `replace` and pin a +real version instead: + +```bash +cd provider && go mod edit -dropreplace github.com/maxvojtkov/terraform-provider-dokploy \ + && go get github.com/maxvojtkov/terraform-provider-dokploy@v0.1.0 +``` + +The upstream provider exposes itself through its `shim` package +(`shim.NewProvider(version)`), because `internal/provider` is not importable +from outside that module. + +## Releasing + +Tag the repository and the `release` workflow does the rest: + +```bash +git tag v0.1.0 && git push origin v0.1.0 +``` + +It publishes plugin binaries to a GitHub release via GoReleaser, pushes the +npm / PyPI / NuGet packages, and commits and tags the Go SDK as `sdk/v0.1.0`. +The workflow needs three repository secrets: `NPM_TOKEN`, `PYPI_API_TOKEN` and +`NUGET_PUBLISH_KEY`. + +## License + +[MPL-2.0](LICENSE). diff --git a/sdk/dotnet/Redirect.cs b/sdk/dotnet/Redirect.cs new file mode 100644 index 0000000..24588c2 --- /dev/null +++ b/sdk/dotnet/Redirect.cs @@ -0,0 +1,160 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/redirect:Redirect")] + public partial class Redirect : global::Pulumi.CustomResource + { + /// + /// Application this redirect belongs to. + /// + [Output("applicationId")] + public Output ApplicationId { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the redirect was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Issue a permanent (301) redirect instead of a temporary (302) one. + /// + [Output("permanent")] + public Output Permanent { get; private set; } = null!; + + /// + /// Regular expression matched against the incoming URL. + /// + [Output("regex")] + public Output Regex { get; private set; } = null!; + + /// + /// Replacement URL, which may reference capture groups such as `${1}`. + /// + [Output("replacement")] + public Output Replacement { get; private set; } = null!; + + + /// + /// Create a Redirect resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Redirect(string name, RedirectArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/redirect:Redirect", name, args ?? new RedirectArgs(), MakeResourceOptions(options, "")) + { + } + + private Redirect(string name, Input id, RedirectState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/redirect:Redirect", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Redirect resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Redirect Get(string name, Input id, RedirectState? state = null, CustomResourceOptions? options = null) + { + return new Redirect(name, id, state, options); + } + } + + public sealed class RedirectArgs : global::Pulumi.ResourceArgs + { + /// + /// Application this redirect belongs to. + /// + [Input("applicationId", required: true)] + public Input ApplicationId { get; set; } = null!; + + /// + /// Issue a permanent (301) redirect instead of a temporary (302) one. + /// + [Input("permanent")] + public Input? Permanent { get; set; } + + /// + /// Regular expression matched against the incoming URL. + /// + [Input("regex", required: true)] + public Input Regex { get; set; } = null!; + + /// + /// Replacement URL, which may reference capture groups such as `${1}`. + /// + [Input("replacement", required: true)] + public Input Replacement { get; set; } = null!; + + public RedirectArgs() + { + } + public static new RedirectArgs Empty => new RedirectArgs(); + } + + public sealed class RedirectState : global::Pulumi.ResourceArgs + { + /// + /// Application this redirect belongs to. + /// + [Input("applicationId")] + public Input? ApplicationId { get; set; } + + /// + /// RFC 3339 timestamp of when the redirect was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Issue a permanent (301) redirect instead of a temporary (302) one. + /// + [Input("permanent")] + public Input? Permanent { get; set; } + + /// + /// Regular expression matched against the incoming URL. + /// + [Input("regex")] + public Input? Regex { get; set; } + + /// + /// Replacement URL, which may reference capture groups such as `${1}`. + /// + [Input("replacement")] + public Input? Replacement { get; set; } + + public RedirectState() + { + } + public static new RedirectState Empty => new RedirectState(); + } +} diff --git a/sdk/dotnet/Redis.cs b/sdk/dotnet/Redis.cs new file mode 100644 index 0000000..ba01305 --- /dev/null +++ b/sdk/dotnet/Redis.cs @@ -0,0 +1,670 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/redis:Redis")] + public partial class Redis : global::Pulumi.CustomResource + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Output("appName")] + public Output AppName { get; private set; } = null!; + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Output("applicationStatus")] + public Output ApplicationStatus { get; private set; } = null!; + + /// + /// Arguments appended to the container command. + /// + [Output("args")] + public Output> Args { get; private set; } = null!; + + /// + /// Override the container entrypoint command. + /// + [Output("command")] + public Output Command { get; private set; } = null!; + + /// + /// Hard CPU limit, for example `1`. + /// + [Output("cpuLimit")] + public Output CpuLimit { get; private set; } = null!; + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Output("cpuReservation")] + public Output CpuReservation { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Password used to authenticate to Redis. + /// + [Output("databasePassword")] + public Output DatabasePassword { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Output("detachDokployNetwork")] + public Output DetachDokployNetwork { get; private set; } = null!; + + /// + /// Redis image to run, for example `redis:7`. + /// + [Output("dockerImage")] + public Output DockerImage { get; private set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Output("endpointSpecSwarm")] + public Output EndpointSpecSwarm { get; private set; } = null!; + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Output("env")] + public Output Env { get; private set; } = null!; + + /// + /// Environment this database belongs to. + /// + [Output("environmentId")] + public Output EnvironmentId { get; private set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Output("externalPort")] + public Output ExternalPort { get; private set; } = null!; + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Output("healthCheckSwarm")] + public Output HealthCheckSwarm { get; private set; } = null!; + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Output("labelsSwarm")] + public Output LabelsSwarm { get; private set; } = null!; + + /// + /// Hard memory limit, for example `512m`. + /// + [Output("memoryLimit")] + public Output MemoryLimit { get; private set; } = null!; + + /// + /// Soft memory reservation, for example `256m`. + /// + [Output("memoryReservation")] + public Output MemoryReservation { get; private set; } = null!; + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Output("modeSwarm")] + public Output ModeSwarm { get; private set; } = null!; + + /// + /// Display name of the database. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// IDs of additional Docker networks to attach. + /// + [Output("networkIds")] + public Output> NetworkIds { get; private set; } = null!; + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Output("networkSwarm")] + public Output NetworkSwarm { get; private set; } = null!; + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Output("placementSwarm")] + public Output PlacementSwarm { get; private set; } = null!; + + /// + /// Number of replicas to run. + /// + [Output("replicas")] + public Output Replicas { get; private set; } = null!; + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Output("restartPolicySwarm")] + public Output RestartPolicySwarm { get; private set; } = null!; + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Output("rollbackConfigSwarm")] + public Output RollbackConfigSwarm { get; private set; } = null!; + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Output("stopGracePeriodSwarm")] + public Output StopGracePeriodSwarm { get; private set; } = null!; + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Output("ulimitsSwarm")] + public Output UlimitsSwarm { get; private set; } = null!; + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Output("updateConfigSwarm")] + public Output UpdateConfigSwarm { get; private set; } = null!; + + + /// + /// Create a Redis resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Redis(string name, RedisArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/redis:Redis", name, args ?? new RedisArgs(), MakeResourceOptions(options, "")) + { + } + + private Redis(string name, Input id, RedisState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/redis:Redis", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "databasePassword", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Redis resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Redis Get(string name, Input id, RedisState? state = null, CustomResourceOptions? options = null) + { + return new Redis(name, id, state, options); + } + } + + public sealed class RedisArgs : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + [Input("databasePassword", required: true)] + private Input? _databasePassword; + + /// + /// Password used to authenticate to Redis. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// Redis image to run, for example `redis:7`. + /// + [Input("dockerImage", required: true)] + public Input DockerImage { get; set; } = null!; + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId", required: true)] + public Input EnvironmentId { get; set; } = null!; + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public RedisArgs() + { + } + public static new RedisArgs Empty => new RedisArgs(); + } + + public sealed class RedisState : global::Pulumi.ResourceArgs + { + /// + /// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + /// + [Input("appName")] + public Input? AppName { get; set; } + + /// + /// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`. + /// + [Input("applicationStatus")] + public Input? ApplicationStatus { get; set; } + + [Input("args")] + private InputList? _args; + + /// + /// Arguments appended to the container command. + /// + public InputList Args + { + get => _args ?? (_args = new InputList()); + set => _args = value; + } + + /// + /// Override the container entrypoint command. + /// + [Input("command")] + public Input? Command { get; set; } + + /// + /// Hard CPU limit, for example `1`. + /// + [Input("cpuLimit")] + public Input? CpuLimit { get; set; } + + /// + /// Soft CPU reservation, for example `0.5`. + /// + [Input("cpuReservation")] + public Input? CpuReservation { get; set; } + + /// + /// RFC 3339 timestamp of when the database was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + [Input("databasePassword")] + private Input? _databasePassword; + + /// + /// Password used to authenticate to Redis. + /// + public Input? DatabasePassword + { + get => _databasePassword; + set + { + var emptySecret = Output.CreateSecret(0); + _databasePassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Detach the service from the shared `dokploy-network`. + /// + [Input("detachDokployNetwork")] + public Input? DetachDokployNetwork { get; set; } + + /// + /// Redis image to run, for example `redis:7`. + /// + [Input("dockerImage")] + public Input? DockerImage { get; set; } + + /// + /// Docker Swarm endpoint specification, as a JSON object. + /// + [Input("endpointSpecSwarm")] + public Input? EndpointSpecSwarm { get; set; } + + /// + /// Environment variables in `KEY=value` format, one per line. + /// + [Input("env")] + public Input? Env { get; set; } + + /// + /// Environment this database belongs to. + /// + [Input("environmentId")] + public Input? EnvironmentId { get; set; } + + /// + /// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + /// + [Input("externalPort")] + public Input? ExternalPort { get; set; } + + /// + /// Docker Swarm health check configuration, as a JSON object. + /// + [Input("healthCheckSwarm")] + public Input? HealthCheckSwarm { get; set; } + + /// + /// Docker Swarm service labels, as a JSON object. + /// + [Input("labelsSwarm")] + public Input? LabelsSwarm { get; set; } + + /// + /// Hard memory limit, for example `512m`. + /// + [Input("memoryLimit")] + public Input? MemoryLimit { get; set; } + + /// + /// Soft memory reservation, for example `256m`. + /// + [Input("memoryReservation")] + public Input? MemoryReservation { get; set; } + + /// + /// Docker Swarm service mode, as a JSON object. + /// + [Input("modeSwarm")] + public Input? ModeSwarm { get; set; } + + /// + /// Display name of the database. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("networkIds")] + private InputList? _networkIds; + + /// + /// IDs of additional Docker networks to attach. + /// + public InputList NetworkIds + { + get => _networkIds ?? (_networkIds = new InputList()); + set => _networkIds = value; + } + + /// + /// Docker Swarm network attachments, as a JSON array. + /// + [Input("networkSwarm")] + public Input? NetworkSwarm { get; set; } + + /// + /// Docker Swarm placement constraints, as a JSON object. + /// + [Input("placementSwarm")] + public Input? PlacementSwarm { get; set; } + + /// + /// Number of replicas to run. + /// + [Input("replicas")] + public Input? Replicas { get; set; } + + /// + /// Docker Swarm restart policy, as a JSON object. + /// + [Input("restartPolicySwarm")] + public Input? RestartPolicySwarm { get; set; } + + /// + /// Docker Swarm rollback configuration, as a JSON object. + /// + [Input("rollbackConfigSwarm")] + public Input? RollbackConfigSwarm { get; set; } + + /// + /// Remote server to deploy on. Omit to use the Dokploy host itself. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Grace period in nanoseconds before a container is killed. + /// + [Input("stopGracePeriodSwarm")] + public Input? StopGracePeriodSwarm { get; set; } + + /// + /// Docker Swarm ulimits, as a JSON object. + /// + [Input("ulimitsSwarm")] + public Input? UlimitsSwarm { get; set; } + + /// + /// Docker Swarm rolling update configuration, as a JSON object. + /// + [Input("updateConfigSwarm")] + public Input? UpdateConfigSwarm { get; set; } + + public RedisState() + { + } + public static new RedisState Empty => new RedisState(); + } +} diff --git a/sdk/dotnet/Registry.cs b/sdk/dotnet/Registry.cs new file mode 100644 index 0000000..6ffc47a --- /dev/null +++ b/sdk/dotnet/Registry.cs @@ -0,0 +1,238 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/registry:Registry")] + public partial class Registry : global::Pulumi.CustomResource + { + /// + /// RFC 3339 timestamp of when the registry was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Prefix prepended to pushed image names, for example an organization or namespace. + /// + [Output("imagePrefix")] + public Output ImagePrefix { get; private set; } = null!; + + /// + /// Password or access token used to authenticate. + /// + [Output("password")] + public Output Password { get; private set; } = null!; + + /// + /// Display name of the registry. + /// + [Output("registryName")] + public Output RegistryName { get; private set; } = null!; + + /// + /// Registry kind. Dokploy currently accepts only `Cloud`. Valid values: `Cloud`. Defaults to `Cloud`. + /// + [Output("registryType")] + public Output RegistryType { get; private set; } = null!; + + /// + /// Registry hostname, for example `ghcr.io`. + /// + [Output("registryUrl")] + public Output RegistryUrl { get; private set; } = null!; + + /// + /// Server this registry is scoped to. + /// + [Output("serverId")] + public Output ServerId { get; private set; } = null!; + + /// + /// Username used to authenticate to the registry. + /// + [Output("username")] + public Output Username { get; private set; } = null!; + + + /// + /// Create a Registry resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Registry(string name, RegistryArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/registry:Registry", name, args ?? new RegistryArgs(), MakeResourceOptions(options, "")) + { + } + + private Registry(string name, Input id, RegistryState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/registry:Registry", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "password", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Registry resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Registry Get(string name, Input id, RegistryState? state = null, CustomResourceOptions? options = null) + { + return new Registry(name, id, state, options); + } + } + + public sealed class RegistryArgs : global::Pulumi.ResourceArgs + { + /// + /// Prefix prepended to pushed image names, for example an organization or namespace. + /// + [Input("imagePrefix")] + public Input? ImagePrefix { get; set; } + + [Input("password", required: true)] + private Input? _password; + + /// + /// Password or access token used to authenticate. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Display name of the registry. + /// + [Input("registryName", required: true)] + public Input RegistryName { get; set; } = null!; + + /// + /// Registry kind. Dokploy currently accepts only `Cloud`. Valid values: `Cloud`. Defaults to `Cloud`. + /// + [Input("registryType")] + public Input? RegistryType { get; set; } + + /// + /// Registry hostname, for example `ghcr.io`. + /// + [Input("registryUrl", required: true)] + public Input RegistryUrl { get; set; } = null!; + + /// + /// Server this registry is scoped to. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Username used to authenticate to the registry. + /// + [Input("username", required: true)] + public Input Username { get; set; } = null!; + + public RegistryArgs() + { + } + public static new RegistryArgs Empty => new RegistryArgs(); + } + + public sealed class RegistryState : global::Pulumi.ResourceArgs + { + /// + /// RFC 3339 timestamp of when the registry was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Prefix prepended to pushed image names, for example an organization or namespace. + /// + [Input("imagePrefix")] + public Input? ImagePrefix { get; set; } + + [Input("password")] + private Input? _password; + + /// + /// Password or access token used to authenticate. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Display name of the registry. + /// + [Input("registryName")] + public Input? RegistryName { get; set; } + + /// + /// Registry kind. Dokploy currently accepts only `Cloud`. Valid values: `Cloud`. Defaults to `Cloud`. + /// + [Input("registryType")] + public Input? RegistryType { get; set; } + + /// + /// Registry hostname, for example `ghcr.io`. + /// + [Input("registryUrl")] + public Input? RegistryUrl { get; set; } + + /// + /// Server this registry is scoped to. + /// + [Input("serverId")] + public Input? ServerId { get; set; } + + /// + /// Username used to authenticate to the registry. + /// + [Input("username")] + public Input? Username { get; set; } + + public RegistryState() + { + } + public static new RegistryState Empty => new RegistryState(); + } +} diff --git a/sdk/dotnet/Security.cs b/sdk/dotnet/Security.cs new file mode 100644 index 0000000..3e32b39 --- /dev/null +++ b/sdk/dotnet/Security.cs @@ -0,0 +1,166 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/security:Security")] + public partial class Security : global::Pulumi.CustomResource + { + /// + /// Application these credentials protect. + /// + [Output("applicationId")] + public Output ApplicationId { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the credentials were created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Basic auth password. + /// + [Output("password")] + public Output Password { get; private set; } = null!; + + /// + /// Basic auth username. + /// + [Output("username")] + public Output Username { get; private set; } = null!; + + + /// + /// Create a Security resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Security(string name, SecurityArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/security:Security", name, args ?? new SecurityArgs(), MakeResourceOptions(options, "")) + { + } + + private Security(string name, Input id, SecurityState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/security:Security", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "password", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Security resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Security Get(string name, Input id, SecurityState? state = null, CustomResourceOptions? options = null) + { + return new Security(name, id, state, options); + } + } + + public sealed class SecurityArgs : global::Pulumi.ResourceArgs + { + /// + /// Application these credentials protect. + /// + [Input("applicationId", required: true)] + public Input ApplicationId { get; set; } = null!; + + [Input("password", required: true)] + private Input? _password; + + /// + /// Basic auth password. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Basic auth username. + /// + [Input("username", required: true)] + public Input Username { get; set; } = null!; + + public SecurityArgs() + { + } + public static new SecurityArgs Empty => new SecurityArgs(); + } + + public sealed class SecurityState : global::Pulumi.ResourceArgs + { + /// + /// Application these credentials protect. + /// + [Input("applicationId")] + public Input? ApplicationId { get; set; } + + /// + /// RFC 3339 timestamp of when the credentials were created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + [Input("password")] + private Input? _password; + + /// + /// Basic auth password. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Basic auth username. + /// + [Input("username")] + public Input? Username { get; set; } + + public SecurityState() + { + } + public static new SecurityState Empty => new SecurityState(); + } +} diff --git a/sdk/dotnet/SshKey.cs b/sdk/dotnet/SshKey.cs new file mode 100644 index 0000000..2a23544 --- /dev/null +++ b/sdk/dotnet/SshKey.cs @@ -0,0 +1,196 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Maxvojtkov.Dokploy +{ + [DokployResourceType("dokploy:index/sshKey:SshKey")] + public partial class SshKey : global::Pulumi.CustomResource + { + /// + /// RFC 3339 timestamp of when the key was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// Free-form description. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// RFC 3339 timestamp of when the key was last used, if ever. + /// + [Output("lastUsedAt")] + public Output LastUsedAt { get; private set; } = null!; + + /// + /// Display name of the key pair. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// PEM-encoded private key. + /// + [Output("privateKey")] + public Output PrivateKey { get; private set; } = null!; + + /// + /// OpenSSH-formatted public key. + /// + [Output("publicKey")] + public Output PublicKey { get; private set; } = null!; + + + /// + /// Create a SshKey resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public SshKey(string name, SshKeyArgs args, CustomResourceOptions? options = null) + : base("dokploy:index/sshKey:SshKey", name, args ?? new SshKeyArgs(), MakeResourceOptions(options, "")) + { + } + + private SshKey(string name, Input id, SshKeyState? state = null, CustomResourceOptions? options = null) + : base("dokploy:index/sshKey:SshKey", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/maxvojtkov/pulumi-dokploy", + AdditionalSecretOutputs = + { + "privateKey", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing SshKey resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static SshKey Get(string name, Input id, SshKeyState? state = null, CustomResourceOptions? options = null) + { + return new SshKey(name, id, state, options); + } + } + + public sealed class SshKeyArgs : global::Pulumi.ResourceArgs + { + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Display name of the key pair. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("privateKey", required: true)] + private Input? _privateKey; + + /// + /// PEM-encoded private key. + /// + public Input? PrivateKey + { + get => _privateKey; + set + { + var emptySecret = Output.CreateSecret(0); + _privateKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// OpenSSH-formatted public key. + /// + [Input("publicKey", required: true)] + public Input PublicKey { get; set; } = null!; + + public SshKeyArgs() + { + } + public static new SshKeyArgs Empty => new SshKeyArgs(); + } + + public sealed class SshKeyState : global::Pulumi.ResourceArgs + { + /// + /// RFC 3339 timestamp of when the key was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// Free-form description. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// RFC 3339 timestamp of when the key was last used, if ever. + /// + [Input("lastUsedAt")] + public Input? LastUsedAt { get; set; } + + /// + /// Display name of the key pair. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("privateKey")] + private Input? _privateKey; + + /// + /// PEM-encoded private key. + /// + public Input? PrivateKey + { + get => _privateKey; + set + { + var emptySecret = Output.CreateSecret(0); + _privateKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// OpenSSH-formatted public key. + /// + [Input("publicKey")] + public Input? PublicKey { get; set; } + + public SshKeyState() + { + } + public static new SshKeyState Empty => new SshKeyState(); + } +} diff --git a/sdk/dotnet/Utilities.cs b/sdk/dotnet/Utilities.cs new file mode 100644 index 0000000..462db25 --- /dev/null +++ b/sdk/dotnet/Utilities.cs @@ -0,0 +1,92 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +namespace Maxvojtkov.Dokploy +{ + static class Utilities + { + public static string? GetEnv(params string[] names) + { + foreach (var n in names) + { + var value = global::System.Environment.GetEnvironmentVariable(n); + if (value != null) + { + return value; + } + } + return null; + } + + static string[] trueValues = { "1", "t", "T", "true", "TRUE", "True" }; + static string[] falseValues = { "0", "f", "F", "false", "FALSE", "False" }; + public static bool? GetEnvBoolean(params string[] names) + { + var s = GetEnv(names); + if (s != null) + { + if (global::System.Array.IndexOf(trueValues, s) != -1) + { + return true; + } + if (global::System.Array.IndexOf(falseValues, s) != -1) + { + return false; + } + } + return null; + } + + public static int? GetEnvInt32(params string[] names) => int.TryParse(GetEnv(names), out int v) ? (int?)v : null; + + public static double? GetEnvDouble(params string[] names) => double.TryParse(GetEnv(names), out double v) ? (double?)v : null; + + [global::System.Obsolete("Please use WithDefaults instead")] + public static global::Pulumi.InvokeOptions WithVersion(this global::Pulumi.InvokeOptions? options) + { + var dst = options ?? new global::Pulumi.InvokeOptions{}; + dst.Version = options?.Version ?? Version; + return dst; + } + + public static global::Pulumi.InvokeOptions WithDefaults(this global::Pulumi.InvokeOptions? src) + { + var dst = src ?? new global::Pulumi.InvokeOptions{}; + dst.Version = src?.Version ?? Version; + dst.PluginDownloadURL = src?.PluginDownloadURL ?? "github://api.github.com/maxvojtkov/pulumi-dokploy"; + return dst; + } + + public static global::Pulumi.InvokeOutputOptions WithDefaults(this global::Pulumi.InvokeOutputOptions? src) + { + var dst = src ?? new global::Pulumi.InvokeOutputOptions{}; + dst.Version = src?.Version ?? Version; + dst.PluginDownloadURL = src?.PluginDownloadURL ?? "github://api.github.com/maxvojtkov/pulumi-dokploy"; + return dst; + } + + private readonly static string version; + public static string Version => version; + + static Utilities() + { + var assembly = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(Utilities)).Assembly; + using var stream = assembly.GetManifestResourceStream("Maxvojtkov.Dokploy.version.txt"); + using var reader = new global::System.IO.StreamReader(stream ?? throw new global::System.NotSupportedException("Missing embedded version.txt file")); + version = reader.ReadToEnd().Trim(); + var parts = version.Split("\n"); + if (parts.Length == 2) + { + // The first part is the provider name. + version = parts[1].Trim(); + } + } + } + + internal sealed class DokployResourceTypeAttribute : global::Pulumi.ResourceTypeAttribute + { + public DokployResourceTypeAttribute(string type) : base(type, Utilities.Version) + { + } + } +} diff --git a/sdk/dotnet/logo.png b/sdk/dotnet/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..181f421e9156e1acb8f0c478a0f184a64b31bc6c GIT binary patch literal 7934 zcmVNNV?z!iDFG5ai9xnY=*#%Wqnkq`+%lx0p1W+WvA_5inJiGyb4gT-zu7M>N8eN1u_D^NM8}?H}fd`G`VY2&@eaUd zw+S~V;JFvC)J>(Q0J;cXW#^?b$i?e{pu4IqQ4`#PoLsy<)J?qu{7i=wfxb#wR3SnGia$0EEB;~&mjT>cCU3q!c>z_@SV09x0x_3E{MCj$N78UtD_r5< zb=lPO+$GeicumM$p62Hnr4h-$r@)mMwX8wk%2Mu~x_C``BFK%`nr?AKo3|B30#OU) zUH`cuf7o~qv{aTa#Z4HT;NO4Lz#wUZujOsf*VAr@Pffhve|~t(QTVn!PXy!}?#}k= z1Of*E`BE(a%~pJy`o=D*3r}@k*ra13j14XgUAFH#o1G>Xl-DkQ$5tI9F3L zM-f&P!PJ41U*80aSQD@Kd_97pnG6_tG^uyHna8FdZ72E7I0qSk*Bx^Q;lTx4)6G`I zn?)lJL89;h*f`y7qvSzeTjIR-5`P_oY+=n`!uSqb(+?qQ!WH;AjXr|GZkZb1VH1Xs zuTLR+!WB4$QD5v@xEjN_cqQUOhG(wiO|`M~S|&br!?3yZ8uBN`r4;kqFpTi){wWy7 zsCXYO9iGWz#N7**=qA7Oyc@F3gQZu&1wERfb;C2^*Zt^&&kxtZAV$Tjv-z>MF9mRB zAmb>RdIuPXF2PYSE(>)qgfa0x__tR_p{qu;scIuni;G_pqjGmld-%u^2M_e%C>X++ zcoDnjCO2`lszOH5F3Oep6l@RtNkK=z5XQty*mXu8QaUR`R*_{IqA?+u0u>H}AqtSQ zgPha@83p~4{5{_+Jx4H?HjwJN&VN@?W}h=ESFWzRr&`1RfFaC@x65v{xX@&|X=hW6 zsbFBG%iMjaPi+~S1TiLFzo|Mab71Y!K$)IgDAiVAKtEnXO_!l-z~%nhe;W&8hIiPy z!3#kkIhk@EGR~&z=d15>_NJTng_CpFsKP> zA8D5d;Nj73HuB*6DPP39tfnaoi%nYMJ-}nOge#;n!D5sO@NH=d2SZ3+3!1Lm@I*+P@0SkCmkJV1BH}52aSf(u=?8*L z_%<{>5D?TU{z$JR5RrFGJO&IKl1R(n0~joWh(?3wiQw$BpYLkA=Pj^!7mpWP>!yuT zr1uvjC=iS$VUi+2z>(oqe*Opa!|PcXoyw$Rj+l>#Lk?)H6coIyy;eYPz_0jpG?Dr& zu4_$yQ3Y6aHT-1|9xj^}>joUGvQVqRky2%diTFy8cuN4?H2J)rcsUGI_&FcZ+c2UO zzRZE5_^f*>JB}h$xu*(fC5xrR+^Z}kGO{n82r?OBuwt^91v8IsAs25Od~+0#DT^}L zBULkxZXp-%GiXNIlm{KHjgfaFk;S_@KtkGpM5Ey<^#(`cuGq=iTzYLT%VXu;BH(7E z1yVC1M7taQK-XuKg883+*`?Bg=p~JiV_Q}YN!W?dC>jwX*l3H-vAHuPYoqVJAy9rZ=0!WCF6yd&5?`i4mxPC;^%vnXKfvXOFB@Ds=g zPYE}^T^8cH6+{sJQaNZXVOxYO){|+ z>I-;sGWEvv0od$1bCfJ#R=6I;cHg&k)s-F>k6qz{Y~&hlWJq@sc`YFIt1EB#_>wM$7I5Zv$`A?d+Umr`rck#s?}e8F0KsJ_?g|F#sb zs|yXV1OiT^Sw55LX2__&L=*8tNGs|}b-~r!BR10o+J=_FvrV2nOX2|NwU4Hv^aFqC*Db#Sy--?NsBsy=rV z{9(_`69{n`dW?QQsjS*Qe<)1KAcWc;mefI_FIWVVZGz8VwjXc2z?Hl z*6yOC9D6HHOzyPDwMnmbTn_$qy<4W4!}8JJdcC#f!nXfA62kiX|1s6^?-)efD%gWu zmo9{Ta3tRbUbrpUT)4T9)kxgDH!w$;ki)z8IoWcZi!sXz@kTd#OVs^F@Zt-OYTCnA z=!Yp?gFjg3H{9*(^_8i}`SpkX&p68Y?j5iOU3>rbWavX!B6XFyu4A=%g*Pm!5CfS2 zk&%08x5WLMNQzQVW??VNWVD#6Ko=mQ<*PWT3Nu5FS``Br@^jMt)*@y8yqq6o@o}xT z3=t_f-c<&BM2fmXB=MGhTNg`CYv+Jbj0K{k2u?vSLHN$6a#O@<_Z7E7j68-4P-8KE z1*q#0?v0GDl5m#x86ijwO#iQLbtm8t`PoiYzb7cWO#5pJBSNZC<(DT@XvyNo>I z&Wn|TS+mffe^j@X>Jo3KHKImcA+mU-^5ANH8Z3aMUXJqkBs?Z0)sWmi3)9WAHOtos zDY`@0v767xuaC{u!#iFHR=knCMimv{OSgQ&fY=?F`1~zi_)~m^OH96 z5KyVi_&o%8>B8CD6TgQT#2y3EsxV20+a(G0U&1~%7}GC9a-`-jVQj3N-vk#cbD`b{ z=;sYa(?gEzs~axGHV%v}UP&J~|E+<^{FlOiZ{@_ROtitezl3Q&1Pa+?gI>AVU~nQ> z(^|hCr;OL6qXA47aKqK^8(;`cPWVE5f}0w9u<9@26cl=9b!O(okoi%V2Ws@L2AF~P zQ}uM5Ja;!8PY;(q`Ec1KGP8gytcMma5=C0vMS^qS`xEEqz%Wu(K#iA@%5nEY1C_!& zuHW@86N3l@N}oP^d#dAhgG5H(OIJQvOkBXc16G=!&ratR;pE!8zZ?Zah>JLZJC;CI zp(O}EJR@#DrdFn4+fj0))iNZ9CtTjTPGqs4m~Vq8V67#ENJelNt}V_cj#5VaCH%=; z7~yh&)xOzwXinVtN@i1vb6l=ay^)k~g+xt9q=e=wb+pqegxD_~%4W|&k@MeckTAPu z#LAE%Sl-0m$<6%EeEz^Nu&z9N!&3<7IE4aaIAN%2wxo3Av%_J{ctqNZDdIo zko1_X88HI77v=HWt|q?TL4S%l@{g0q{ZQ-Uoi5Jy!-(CJl+lJ4E=+P19+BKN?BDZ* zyB*K^pAbXWggZqkoyg*C=J3BXduHvW3l!~BkwphiAFPtnC#5bM@~`njX~{)>@)x(K zraCEywZf=ZnMC13S3aomM@Ef>xfpm5(B4b_J72RBv8DM3;y}g*BY%LHJ15bJHZ<^9 zV$&GdOBZ6*ZaGf{cMDdyE_*WAS>65m!OlOEyuNfzM0@u3JA;;mizxLSQIa>43D*Q zqG`npFD|8F=Rg4}4yhwVy6C+j9JrfA1AG*$i`Nv=eC}v1A8Xcj!&tmE7Vk2|AUI&} zG^Y$#!5(Yx-=260dW1|^oF;)6xh)%{IH+g%O#@M>SL^(zjFhW!un2#y_tf}P&xlvB zJtXRnL{a43uz~eqj@p`2C#wgegdQpH7J5p&DY*Oah7m>HbyEt^QDAf@Z9l?}ly?g~ zCEg%)SO$woeRl1q_0W&6AFlI~UxDqB@~|#6-9%4`S8$1}&DaH$SsLZA5AN$9mcoD1 zy~pk7xs*W&?c1;$Z;|4<-jV}JAtCR9EAqY_M?Xjt*`mHbJ}qT8i|#%;w7XBAA1-X> zy55Y~**o#36_P?0sRuTP!Fl|oIP4*C!mkf)JyyUwWsnB4HO=?L+8`x@3O!{@=tz0;C;0SBXcBKm3{s#jKejRqgUSK; zj&;+=i&WplWOw_jR6y=tJigFyU6-PWIJ9`ZXiHu%=rjv>Y-f`J$txB+T0)BVf;7Oh z#;04~jZd$>xDa_Lv}1UuZk}ttQiclEyV@zFD71Kyyn9r(Rbfvn>Ms1v0&H#}Y-pEX z1DxPD>j`H|RlTv~J&$!9@5>@z7e1=Yt%enFs9WgQGHJxo6lF9;EIhBvwy*nGk?knF z_TKqP2hn%~dGp7)c<-gs<<{x8M54jtCAsGs>>zKIvA6?{agYV+Am{by@ZD$8@^!9~pF$dADST| zFO_*g(s2h>5QQ(@f6tzPx$>|~UE=YZFf!mcYpbsNo8!NM?MDR}IG&3UZTEphZ*9fj zR=m7}l-y1bp?t5aHU-R!w^_cKVf#=!z*_a7End3tyMR_m|M(`)VpYu7{a)mJ(3GQBs95C3LP^>M0xP zf(Um@NveP|Neefi+-~94M!c@MoghDjm|A<+&R&8y97<$n0T-baGcd4gK=MeQJC*d1 z<9yT~UgIveuJ>81&L$p=vPyN=B7tyGA1xL|U{;;#M6DABVT&M>EPAY{U z{kRZXG_C^T>jor8Q@Bw?XA9ynQHKn8Otcm+ku@&_u$Vpwl0vvj9qX`+ zM(&pLPQk?Q)w=_s;9eMlB znn&-Utn{Hto6)z4mqsWhB3^{2{RsBM^O@j3PY+-DAoc?37k8%Qhs=wBLzsC4&xx+N zu6{+*1XD&H&mskn33#v#Evq)mpk>DXcCx7mz4uENOo22A1(RNI~eLt_vg!wtC z4T=(d0n%xn79^Db-)GH>synv+1K!D*iHj%bU2X7n+Bfu|;(-A_Se*MqHfGNJs0(A9 zgqFb)VaD{^Mqb_pn?!qkvBJ8mu@u*dCMQ{>!Y~Azwxce`OkF>Fr*##jZK+I?b)yQ2 zI#tNY1X5uj@MiSNU=LENy(@cL@k(1E*s>1|@SSMvFWhpT#+yO&#%wJfm=6B-`Oia` z^o81_;Dw5{TB3))P_kM!%lRS0l_K=JVx-55SBoHq^WF$0UafVK+nJ$o+!t*v5_6ux zmLk5u_Ul04(n6RAh7zxrI#_n1;ir~tA8}4(2*s1b^6Nmb64rt>^ys@wH0$iCdm064 zl*?47JDEC`X8MBGvK7WJ0tVlfqzeqR0xHe_3c3~F6QKx$V)i0l5cFhUMI5BPT@6=L z95avR_YcerY>Jm(sqkZ4k)|2$jZd$l#Z{;K7)MIKn{7Z0?oZ61%XxEwXoAIigo5Hf zi?<;yj4a+;j#fA1MR&IxO3NT6D$+f5QR5=WmFt{qj`~?eIm6)%2{hRb6?t~5r~LHT>kO}KhH3= zwxWzA?TqG+PvhD@+H1`Wi%c#YsL0uWDDE>e1xMZC7j8VvlrH)A;WkFB-W0TVnVY29 zLmZEZ$o;&M`+_YZHp2%l<(D8vZXS&0|C!(YBerJi!q7DGZ~%@DI(SE>7bt2O5#i`i z!I}B^$Kf|hwSR>=Ei(ZK9sLgwk;vk;>4m_ntd}GG1+f~Xjz;xII12xnzfRhA_}LH1 zJDWxxoC4f|4%QnSfhC2ghJ8GG$(EH`yL8Jf#yN~7)+B{JFNE;ya`x#I40<_c(iCuW zI#)gs#K;3W2Q{ggnM$~C6%2|R7q9H5ZMg9UV`GWe^Fr9hH^H#e2B90_w8mtdeRjT^ z-`SRmfS-(&Cp(?X-|$4(Xo`O5HQg3KsP&t1TRmgXu$6v0yJBpVdEukfjs`G;QF3GXFRxNUyF8LoRWLwPz-#Z;!8Fo-xTTaa z;ewldHX}ZChdtNREJ&Gl`)?5*d9TUij7Nqy;P^H>LU6C?6>%7Z>O# z`jlVzG8jVq5I7u-m>zKC4VqBpFYmx?M>QbX=qsD^%V%#-orVNR%(uZ8aB?YxwtuQm zJ4#NUzGk8ZEVbN%;~9`9kF-KW-QJ*y7>SM(2Np|7H6E{dB zqC{aS&&(cLxDffHiV!2zggZjgheWCm5_J_<7sNh^?CfSmt{{lN1gm6TA}2(AEv2IH zQ0rsoLX7mp!I)QB;6^jmH1izFA^p+uK!+G$+vS zuPvhIg{Ff3T6Mh>UxfSb{&JMV*k@o1qGgwyTIrKI#KE%)y6ijq1=%Ha9jqOuxw!@AIP6FntffdY3&Ysju!gw#RKA1-KJw7;8{ z*fwuw=sEFn$xSv!EPJaR3hiz1*zv9^*oCx)T)bIFstyETGxtTVnbpESSgg2giYk6$D)!e^y3qNT$i$INYMd3DPGx{wwn7QRwCAWt@$DJYSa~a zQoMpjl;~?K_vHm!`$d~<2?r;mSZTtMK7(G3xKNQlIsP*g6 zkn{Fg9tD`o=>AYo6U)Inb%=;K(eRfufa)5=$2aom@mg*xp1a7q zo3(fUng2wYXuirfVg#Zg{b4r_U7n4VXa3rczSsDVsGh=-CN#9t@0{zg=JKdKH#zTq zls@?oz;Twf!ehH^s=^p+czLdi_zuLR-_^tyR|fC~g#MYZCehZUkw-W2Tu0vBc)76H zIJvs25T|#YH`lyJ6#TKy!krzy@f*e(T{jTz(#N z+h>uBcOQ0yyzN#vrI7YT5t3}V{%0^JmpC8!C-qbvQb#x^E+Q&^ljwD~A8wudL+|gF o<>ch#d-e*gdg07*qoM6N<$f=pRTKL7v# literal 0 HcmV?d00001 diff --git a/sdk/dotnet/pulumi-plugin.json b/sdk/dotnet/pulumi-plugin.json new file mode 100644 index 0000000..367f36a --- /dev/null +++ b/sdk/dotnet/pulumi-plugin.json @@ -0,0 +1,6 @@ +{ + "resource": true, + "name": "dokploy", + "version": "0.1.0", + "server": "github://api.github.com/maxvojtkov/pulumi-dokploy" +} diff --git a/sdk/dotnet/version.txt b/sdk/dotnet/version.txt new file mode 100644 index 0000000..6c6aa7c --- /dev/null +++ b/sdk/dotnet/version.txt @@ -0,0 +1 @@ +0.1.0 \ No newline at end of file diff --git a/sdk/go.mod b/sdk/go.mod new file mode 100644 index 0000000..414a157 --- /dev/null +++ b/sdk/go.mod @@ -0,0 +1,115 @@ +module github.com/maxvojtkov/pulumi-dokploy/sdk + +go 1.25.11 + +require ( + github.com/blang/semver v3.5.1+incompatible + github.com/pulumi/pulumi/sdk/v3 v3.256.0 +) + +require ( + github.com/BurntSushi/toml v1.6.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProtonMail/go-crypto v1.4.1 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/charmbracelet/bubbles v1.0.0 // indirect + github.com/charmbracelet/bubbletea v1.3.10 // indirect + github.com/charmbracelet/colorprofile v0.4.2 // indirect + github.com/charmbracelet/lipgloss v1.1.0 // indirect + github.com/charmbracelet/x/ansi v0.11.6 // indirect + github.com/charmbracelet/x/cellbuf v0.0.15 // indirect + github.com/charmbracelet/x/term v0.2.2 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/clipperhouse/displaywidth v0.11.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect + github.com/cloudflare/circl v1.6.3 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect + github.com/go-git/gcfg/v2 v2.0.2 // indirect + github.com/go-git/go-billy/v6 v6.0.0-alpha.1 // indirect + github.com/go-git/go-git/v6 v6.0.0-alpha.4 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.5 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-version v1.8.0 // indirect + github.com/hashicorp/hcl/v2 v2.22.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kevinburke/ssh_config v1.6.0 // indirect + github.com/klauspost/compress v1.18.7 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/lucasb-eyer/go-colorful v1.3.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.20 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/termenv v0.16.0 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/fx v0.1.6 // indirect + github.com/pgavlin/fx/v2 v2.0.12 // indirect + github.com/pjbgf/sha1cd v0.6.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect + github.com/sergi/go-diff v1.4.0 // indirect + github.com/spf13/cast v1.4.1 // indirect + github.com/spf13/cobra v1.10.2 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/zclconf/go-cty v1.13.2 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/collector/featuregate v1.53.0 // indirect + go.opentelemetry.io/collector/pdata v1.53.0 // indirect + go.opentelemetry.io/contrib/bridges/otelslog v0.18.0 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect + go.opentelemetry.io/otel/log v0.19.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.19.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/net v0.56.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/term v0.44.0 // indirect + golang.org/x/text v0.39.0 // indirect + golang.org/x/tools v0.47.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/grpc v1.82.1 // indirect + google.golang.org/protobuf v1.36.11 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect +) diff --git a/sdk/go.sum b/sdk/go.sum new file mode 100644 index 0000000..19a88a3 --- /dev/null +++ b/sdk/go.sum @@ -0,0 +1,335 @@ +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.4.1 h1:9RfcZHqEQUvP8RzecWEUafnZVtEvrBVL9BiF67IQOfM= +github.com/ProtonMail/go-crypto v1.4.1/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc= +github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E= +github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= +github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= +github.com/charmbracelet/colorprofile v0.4.2 h1:BdSNuMjRbotnxHSfxy+PCSa4xAmz7szw70ktAtWRYrY= +github.com/charmbracelet/colorprofile v0.4.2/go.mod h1:0rTi81QpwDElInthtrQ6Ni7cG0sDtwAd4C4le060fT8= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/x/ansi v0.11.6 h1:GhV21SiDz/45W9AnV2R61xZMRri5NlLnl6CVF7ihZW8= +github.com/charmbracelet/x/ansi v0.11.6/go.mod h1:2JNYLgQUsyqaiLovhU2Rv/pb8r6ydXKS3NIttu3VGZQ= +github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI= +github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q= +github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= +github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= +github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= +github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= +github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= +github.com/go-git/gcfg/v2 v2.0.2 h1:MY5SIIfTGGEMhdA7d7JePuVVxtKL7Hp+ApGDJAJ7dpo= +github.com/go-git/gcfg/v2 v2.0.2/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs= +github.com/go-git/go-billy/v6 v6.0.0-alpha.1 h1:xVjAR4oUvrKy7/Xuw/lLlV3gkxR3KO2H8W+MamuVVsQ= +github.com/go-git/go-billy/v6 v6.0.0-alpha.1/go.mod h1:eaCUpHbedW7//EwcYmUDfJe2N6sJC9O12AT0OTqJR1E= +github.com/go-git/go-git-fixtures/v6 v6.0.0-alpha.1 h1:gmqi2jvsreu0s8JMLylYDFq4sbjHwwlhktMw0DUg3mA= +github.com/go-git/go-git-fixtures/v6 v6.0.0-alpha.1/go.mod h1:ECf1MqJlBdYpKggBrOXjo/0EnvRZx6D++I86UYjPgAQ= +github.com/go-git/go-git/v6 v6.0.0-alpha.4 h1:aDTc2UGanmaE7FkGLSlBEB9nohMnQ+RKXcfq/D+esDQ= +github.com/go-git/go-git/v6 v6.0.0-alpha.4/go.mod h1:4ODa/G7hPWrh4Y+7lmt59Ij3zW38IEfvRoAZxLYYBhc= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= +github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/hcl/v2 v2.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M= +github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kevinburke/ssh_config v1.6.0 h1:J1FBfmuVosPHf5GRdltRLhPJtJpTlMdKTBjRgTaQBFY= +github.com/kevinburke/ssh_config v1.6.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.18.7 h1:aUyZsS4kH3QTKurYhAOwAHxllVPnOthb3vPfnF1Ehjw= +github.com/klauspost/compress v1.18.7/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= +github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ= +github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= +github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= +github.com/pgavlin/fx/v2 v2.0.12 h1:SjjaJ68Dt8Z4zHwOpY/RPijd7lShs6xYupJbF9ra00M= +github.com/pgavlin/fx/v2 v2.0.12/go.mod h1:M/nF/ooAOy+NUBooYYXl2REARzJ/giPJxfMs8fINfKc= +github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU= +github.com/pjbgf/sha1cd v0.6.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= +github.com/pulumi/pulumi/sdk/v3 v3.256.0 h1:OrkIu7Iw3HUcMtoEy2uzpD21C32B5EYBLBgBoh/uQPM= +github.com/pulumi/pulumi/sdk/v3 v3.256.0/go.mod h1:pyX/FL1Ta3mn4UPfYh2LKG+q/90i2+Jnl0OX4cS+b9U= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= +github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= +github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/collector/featuregate v1.53.0 h1:cgjXdtl7jezWxq6V0eohe/JqjY4PBotZGb5+bTR2OJw= +go.opentelemetry.io/collector/featuregate v1.53.0/go.mod h1:PS7zY/zaCb28EqciePVwRHVhc3oKortTFXsi3I6ee4g= +go.opentelemetry.io/collector/internal/testutil v0.147.0 h1:DFlRxBRp23/sZnpTITK25yqe0d56yNvK+63IaWc6OsU= +go.opentelemetry.io/collector/internal/testutil v0.147.0/go.mod h1:Jkjs6rkqs973LqgZ0Fe3zrokQRKULYXPIf4HuqStiEE= +go.opentelemetry.io/collector/pdata v1.53.0 h1:DlYDbRwammEZaxDZHINx5v0n8SEOVNniPbi6FRTlVkA= +go.opentelemetry.io/collector/pdata v1.53.0/go.mod h1:LRSYGNjKXaUrZEwZv3Yl+8/zV2HmRGKXW62zB2bysms= +go.opentelemetry.io/contrib/bridges/otelslog v0.18.0 h1:hhPGP3zvvy1xWT9RTy970wlniSxFttBIsAK1gvMguJM= +go.opentelemetry.io/contrib/bridges/otelslog v0.18.0/go.mod h1:twJF7inoMza6kxMcF8JOdL3mPmtOZu7GEr34CUNE6Dg= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0 h1:Dn8rkudDzY6KV9dr/D/bTUuWgqDf9xe0rr4G2elrn0Y= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0/go.mod h1:gMk9F0xDgyN9M/3Ed5Y1wKcx/9mlU91NXY2SNq7RQuU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= +go.opentelemetry.io/otel/log v0.19.0 h1:KUZs/GOsw79TBBMfDWsXS+KZ4g2Ckzksd1ymzsIEbo4= +go.opentelemetry.io/otel/log v0.19.0/go.mod h1:5DQYeGmxVIr4n0/BcJvF4upsraHjg6vudJJpnkL6Ipk= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/log v0.19.0 h1:scYVLqT22D2gqXItnWiocLUKGH9yvkkeql5dBDiXyko= +go.opentelemetry.io/otel/sdk/log v0.19.0/go.mod h1:vFBowwXGLlW9AvpuF7bMgnNI95LiW10szrOdvzBHlAg= +go.opentelemetry.io/otel/sdk/log/logtest v0.19.0 h1:BEbF7ZBB6qQloV/Ub1+3NQoOUnVtcGkU3XX4Ws3GQfk= +go.opentelemetry.io/otel/sdk/log/logtest v0.19.0/go.mod h1:Lua81/3yM0wOmoHTokLj9y9ADeA02v1naRrVrkAZuKk= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= +go.opentelemetry.io/proto/slim/otlp v1.9.0 h1:fPVMv8tP3TrsqlkH1HWYUpbCY9cAIemx184VGkS6vlE= +go.opentelemetry.io/proto/slim/otlp v1.9.0/go.mod h1:xXdeJJ90Gqyll+orzUkY4bOd2HECo5JofeoLpymVqdI= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0 h1:o13nadWDNkH/quoDomDUClnQBpdQQ2Qqv0lQBjIXjE8= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0/go.mod h1:Gyb6Xe7FTi/6xBHwMmngGoHqL0w29Y4eW8TGFzpefGA= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.2.0 h1:EiUYvtwu6PMrMHVjcPfnsG3v+ajPkbUeH+IL93+QYyk= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.2.0/go.mod h1:mUUHKFiN2SST3AhJ8XhJxEoeVW12oqfXog0Bo8W3Ec4= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= +golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= +pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= diff --git a/sdk/go/.gitattributes b/sdk/go/.gitattributes new file mode 100644 index 0000000..aae64e2 --- /dev/null +++ b/sdk/go/.gitattributes @@ -0,0 +1 @@ +* linguist-generated diff --git a/sdk/go/Pulumi.yaml b/sdk/go/Pulumi.yaml new file mode 100644 index 0000000..29962d3 --- /dev/null +++ b/sdk/go/Pulumi.yaml @@ -0,0 +1,3 @@ +name: dokploy +description: A Pulumi resource provider for dokploy. +language: go diff --git a/sdk/go/dokploy/application.go b/sdk/go/dokploy/application.go new file mode 100644 index 0000000..bcb8b98 --- /dev/null +++ b/sdk/go/dokploy/application.go @@ -0,0 +1,1650 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Application struct { + pulumi.CustomResourceState + + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + AppName pulumi.StringOutput `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringOutput `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args pulumi.StringArrayOutput `pulumi:"args"` + // Deploy automatically when the configured trigger fires. + AutoDeploy pulumi.BoolOutput `pulumi:"autoDeploy"` + // Bitbucket branch to build. + BitbucketBranch pulumi.StringPtrOutput `pulumi:"bitbucketBranch"` + // Path within the Bitbucket repository to build from. + BitbucketBuildPath pulumi.StringOutput `pulumi:"bitbucketBuildPath"` + // ID of the configured Bitbucket provider connection. + BitbucketId pulumi.StringPtrOutput `pulumi:"bitbucketId"` + // Bitbucket repository owner. + BitbucketOwner pulumi.StringPtrOutput `pulumi:"bitbucketOwner"` + // Bitbucket repository name. + BitbucketRepository pulumi.StringPtrOutput `pulumi:"bitbucketRepository"` + // Bitbucket repository slug. + BitbucketRepositorySlug pulumi.StringPtrOutput `pulumi:"bitbucketRepositorySlug"` + // GitHub branch to build. + Branch pulumi.StringPtrOutput `pulumi:"branch"` + // Docker build arguments in `KEY=value` format, one per line. + BuildArgs pulumi.StringPtrOutput `pulumi:"buildArgs"` + // Path within the GitHub repository to build from. + BuildPath pulumi.StringOutput `pulumi:"buildPath"` + // Registry used by a dedicated build server. + BuildRegistryId pulumi.StringPtrOutput `pulumi:"buildRegistryId"` + // Docker build secrets in `KEY=value` format, one per line. + BuildSecrets pulumi.StringOutput `pulumi:"buildSecrets"` + // Server that performs builds, when separate from the deploy server. + BuildServerId pulumi.StringPtrOutput `pulumi:"buildServerId"` + // How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + BuildType pulumi.StringOutput `pulumi:"buildType"` + // Discard the build cache on the next deployment. + CleanCache pulumi.BoolOutput `pulumi:"cleanCache"` + // Override the container entrypoint command. + Command pulumi.StringPtrOutput `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrOutput `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrOutput `pulumi:"cpuReservation"` + // Write the environment variables to a `.env` file in the container. + CreateEnvFile pulumi.BoolOutput `pulumi:"createEnvFile"` + // RFC 3339 timestamp of when the application was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Branch to build for a custom Git remote. + CustomGitBranch pulumi.StringPtrOutput `pulumi:"customGitBranch"` + // Path within a custom Git repository to build from. + CustomGitBuildPath pulumi.StringPtrOutput `pulumi:"customGitBuildPath"` + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId pulumi.StringPtrOutput `pulumi:"customGitSshKeyId"` + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl pulumi.StringPtrOutput `pulumi:"customGitUrl"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolOutput `pulumi:"detachDokployNetwork"` + // Target stage for a multi-stage Docker build. + DockerBuildStage pulumi.StringPtrOutput `pulumi:"dockerBuildStage"` + // Docker build context path. + DockerContextPath pulumi.StringPtrOutput `pulumi:"dockerContextPath"` + // Docker image reference, when `sourceType` is `docker`. + DockerImage pulumi.StringPtrOutput `pulumi:"dockerImage"` + // Path to the Dockerfile, when `buildType` is `dockerfile`. + Dockerfile pulumi.StringOutput `pulumi:"dockerfile"` + // Clone Git submodules when checking out the repository. + EnableSubmodules pulumi.BoolOutput `pulumi:"enableSubmodules"` + // Whether the application is enabled. + Enabled pulumi.BoolOutput `pulumi:"enabled"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrOutput `pulumi:"endpointSpecSwarm"` + // Runtime environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this application belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Gitea branch to build. + GiteaBranch pulumi.StringPtrOutput `pulumi:"giteaBranch"` + // Path within the Gitea repository to build from. + GiteaBuildPath pulumi.StringOutput `pulumi:"giteaBuildPath"` + // ID of the configured Gitea provider connection. + GiteaId pulumi.StringPtrOutput `pulumi:"giteaId"` + // Gitea repository owner. + GiteaOwner pulumi.StringPtrOutput `pulumi:"giteaOwner"` + // Gitea repository name. + GiteaRepository pulumi.StringPtrOutput `pulumi:"giteaRepository"` + // ID of the configured GitHub provider connection. + GithubId pulumi.StringPtrOutput `pulumi:"githubId"` + // GitLab branch to build. + GitlabBranch pulumi.StringPtrOutput `pulumi:"gitlabBranch"` + // Path within the GitLab repository to build from. + GitlabBuildPath pulumi.StringOutput `pulumi:"gitlabBuildPath"` + // ID of the configured GitLab provider connection. + GitlabId pulumi.StringPtrOutput `pulumi:"gitlabId"` + // GitLab repository owner. + GitlabOwner pulumi.StringPtrOutput `pulumi:"gitlabOwner"` + // Full GitLab namespace path. + GitlabPathNamespace pulumi.StringPtrOutput `pulumi:"gitlabPathNamespace"` + // Numeric GitLab project ID. + GitlabProjectId pulumi.IntPtrOutput `pulumi:"gitlabProjectId"` + // GitLab repository name. + GitlabRepository pulumi.StringPtrOutput `pulumi:"gitlabRepository"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrOutput `pulumi:"healthCheckSwarm"` + // Heroku buildpack stack version. + HerokuVersion pulumi.StringOutput `pulumi:"herokuVersion"` + // Build a preview deployment for each pull request. + IsPreviewDeploymentsActive pulumi.BoolOutput `pulumi:"isPreviewDeploymentsActive"` + // Serve a static build as a single-page application. + IsStaticSpa pulumi.BoolOutput `pulumi:"isStaticSpa"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrOutput `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrOutput `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrOutput `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrOutput `pulumi:"modeSwarm"` + // Display name of the application. + Name pulumi.StringOutput `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayOutput `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrOutput `pulumi:"networkSwarm"` + // GitHub repository owner. + Owner pulumi.StringPtrOutput `pulumi:"owner"` + // Registry password, when pulling a private image. + Password pulumi.StringOutput `pulumi:"password"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrOutput `pulumi:"placementSwarm"` + // Build arguments applied to preview deployments. + PreviewBuildArgs pulumi.StringPtrOutput `pulumi:"previewBuildArgs"` + // Build secrets applied to preview deployments. + PreviewBuildSecrets pulumi.StringOutput `pulumi:"previewBuildSecrets"` + // Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + PreviewCertificateType pulumi.StringOutput `pulumi:"previewCertificateType"` + // Traefik certificate resolver for preview deployments. + PreviewCustomCertResolver pulumi.StringPtrOutput `pulumi:"previewCustomCertResolver"` + // Environment variables applied to preview deployments. + PreviewEnv pulumi.StringPtrOutput `pulumi:"previewEnv"` + // Serve preview deployments over HTTPS. + PreviewHttps pulumi.BoolOutput `pulumi:"previewHttps"` + // Pull request labels that opt into preview deployments. + PreviewLabels pulumi.StringArrayOutput `pulumi:"previewLabels"` + // Maximum number of concurrent preview deployments. + PreviewLimit pulumi.IntOutput `pulumi:"previewLimit"` + // Base path for preview deployments. + PreviewPath pulumi.StringOutput `pulumi:"previewPath"` + // Container port exposed by preview deployments. + PreviewPort pulumi.IntOutput `pulumi:"previewPort"` + // Wildcard domain used to expose preview deployments. + PreviewWildcard pulumi.StringPtrOutput `pulumi:"previewWildcard"` + // Directory served when `buildType` is `static`. + PublishDirectory pulumi.StringPtrOutput `pulumi:"publishDirectory"` + // Railpack version. + RailpackVersion pulumi.StringOutput `pulumi:"railpackVersion"` + // Registry used to push the built image. + RegistryId pulumi.StringPtrOutput `pulumi:"registryId"` + // Registry URL, when pulling a private image. + RegistryUrl pulumi.StringPtrOutput `pulumi:"registryUrl"` + // Number of replicas to run. + Replicas pulumi.IntOutput `pulumi:"replicas"` + // GitHub repository name. + Repository pulumi.StringPtrOutput `pulumi:"repository"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrOutput `pulumi:"restartPolicySwarm"` + // Keep previous images so deployments can be rolled back. + RollbackActive pulumi.BoolOutput `pulumi:"rollbackActive"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrOutput `pulumi:"rollbackConfigSwarm"` + // Registry used to store rollback images. + RollbackRegistryId pulumi.StringPtrOutput `pulumi:"rollbackRegistryId"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + SourceType pulumi.StringOutput `pulumi:"sourceType"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrOutput `pulumi:"stopGracePeriodSwarm"` + // Display subtitle shown in the Dokploy UI. + Subtitle pulumi.StringPtrOutput `pulumi:"subtitle"` + // Display title shown in the Dokploy UI. + Title pulumi.StringPtrOutput `pulumi:"title"` + // What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + TriggerType pulumi.StringOutput `pulumi:"triggerType"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrOutput `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrOutput `pulumi:"updateConfigSwarm"` + // Registry username, when pulling a private image. + Username pulumi.StringPtrOutput `pulumi:"username"` + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths pulumi.StringArrayOutput `pulumi:"watchPaths"` +} + +// NewApplication registers a new resource with the given unique name, arguments, and options. +func NewApplication(ctx *pulumi.Context, + name string, args *ApplicationArgs, opts ...pulumi.ResourceOption) (*Application, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + if args.BuildSecrets != nil { + args.BuildSecrets = pulumi.ToSecret(args.BuildSecrets).(pulumi.StringPtrInput) + } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringPtrInput) + } + if args.PreviewBuildSecrets != nil { + args.PreviewBuildSecrets = pulumi.ToSecret(args.PreviewBuildSecrets).(pulumi.StringPtrInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "buildSecrets", + "password", + "previewBuildSecrets", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Application + err := ctx.RegisterResource("dokploy:index/application:Application", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetApplication gets an existing Application resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetApplication(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ApplicationState, opts ...pulumi.ResourceOption) (*Application, error) { + var resource Application + err := ctx.ReadResource("dokploy:index/application:Application", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Application resources. +type applicationState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + AppName *string `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus *string `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Deploy automatically when the configured trigger fires. + AutoDeploy *bool `pulumi:"autoDeploy"` + // Bitbucket branch to build. + BitbucketBranch *string `pulumi:"bitbucketBranch"` + // Path within the Bitbucket repository to build from. + BitbucketBuildPath *string `pulumi:"bitbucketBuildPath"` + // ID of the configured Bitbucket provider connection. + BitbucketId *string `pulumi:"bitbucketId"` + // Bitbucket repository owner. + BitbucketOwner *string `pulumi:"bitbucketOwner"` + // Bitbucket repository name. + BitbucketRepository *string `pulumi:"bitbucketRepository"` + // Bitbucket repository slug. + BitbucketRepositorySlug *string `pulumi:"bitbucketRepositorySlug"` + // GitHub branch to build. + Branch *string `pulumi:"branch"` + // Docker build arguments in `KEY=value` format, one per line. + BuildArgs *string `pulumi:"buildArgs"` + // Path within the GitHub repository to build from. + BuildPath *string `pulumi:"buildPath"` + // Registry used by a dedicated build server. + BuildRegistryId *string `pulumi:"buildRegistryId"` + // Docker build secrets in `KEY=value` format, one per line. + BuildSecrets *string `pulumi:"buildSecrets"` + // Server that performs builds, when separate from the deploy server. + BuildServerId *string `pulumi:"buildServerId"` + // How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + BuildType *string `pulumi:"buildType"` + // Discard the build cache on the next deployment. + CleanCache *bool `pulumi:"cleanCache"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Write the environment variables to a `.env` file in the container. + CreateEnvFile *bool `pulumi:"createEnvFile"` + // RFC 3339 timestamp of when the application was created. + CreatedAt *string `pulumi:"createdAt"` + // Branch to build for a custom Git remote. + CustomGitBranch *string `pulumi:"customGitBranch"` + // Path within a custom Git repository to build from. + CustomGitBuildPath *string `pulumi:"customGitBuildPath"` + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId *string `pulumi:"customGitSshKeyId"` + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl *string `pulumi:"customGitUrl"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // Target stage for a multi-stage Docker build. + DockerBuildStage *string `pulumi:"dockerBuildStage"` + // Docker build context path. + DockerContextPath *string `pulumi:"dockerContextPath"` + // Docker image reference, when `sourceType` is `docker`. + DockerImage *string `pulumi:"dockerImage"` + // Path to the Dockerfile, when `buildType` is `dockerfile`. + Dockerfile *string `pulumi:"dockerfile"` + // Clone Git submodules when checking out the repository. + EnableSubmodules *bool `pulumi:"enableSubmodules"` + // Whether the application is enabled. + Enabled *bool `pulumi:"enabled"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Runtime environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this application belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Gitea branch to build. + GiteaBranch *string `pulumi:"giteaBranch"` + // Path within the Gitea repository to build from. + GiteaBuildPath *string `pulumi:"giteaBuildPath"` + // ID of the configured Gitea provider connection. + GiteaId *string `pulumi:"giteaId"` + // Gitea repository owner. + GiteaOwner *string `pulumi:"giteaOwner"` + // Gitea repository name. + GiteaRepository *string `pulumi:"giteaRepository"` + // ID of the configured GitHub provider connection. + GithubId *string `pulumi:"githubId"` + // GitLab branch to build. + GitlabBranch *string `pulumi:"gitlabBranch"` + // Path within the GitLab repository to build from. + GitlabBuildPath *string `pulumi:"gitlabBuildPath"` + // ID of the configured GitLab provider connection. + GitlabId *string `pulumi:"gitlabId"` + // GitLab repository owner. + GitlabOwner *string `pulumi:"gitlabOwner"` + // Full GitLab namespace path. + GitlabPathNamespace *string `pulumi:"gitlabPathNamespace"` + // Numeric GitLab project ID. + GitlabProjectId *int `pulumi:"gitlabProjectId"` + // GitLab repository name. + GitlabRepository *string `pulumi:"gitlabRepository"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Heroku buildpack stack version. + HerokuVersion *string `pulumi:"herokuVersion"` + // Build a preview deployment for each pull request. + IsPreviewDeploymentsActive *bool `pulumi:"isPreviewDeploymentsActive"` + // Serve a static build as a single-page application. + IsStaticSpa *bool `pulumi:"isStaticSpa"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the application. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // GitHub repository owner. + Owner *string `pulumi:"owner"` + // Registry password, when pulling a private image. + Password *string `pulumi:"password"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Build arguments applied to preview deployments. + PreviewBuildArgs *string `pulumi:"previewBuildArgs"` + // Build secrets applied to preview deployments. + PreviewBuildSecrets *string `pulumi:"previewBuildSecrets"` + // Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + PreviewCertificateType *string `pulumi:"previewCertificateType"` + // Traefik certificate resolver for preview deployments. + PreviewCustomCertResolver *string `pulumi:"previewCustomCertResolver"` + // Environment variables applied to preview deployments. + PreviewEnv *string `pulumi:"previewEnv"` + // Serve preview deployments over HTTPS. + PreviewHttps *bool `pulumi:"previewHttps"` + // Pull request labels that opt into preview deployments. + PreviewLabels []string `pulumi:"previewLabels"` + // Maximum number of concurrent preview deployments. + PreviewLimit *int `pulumi:"previewLimit"` + // Base path for preview deployments. + PreviewPath *string `pulumi:"previewPath"` + // Container port exposed by preview deployments. + PreviewPort *int `pulumi:"previewPort"` + // Wildcard domain used to expose preview deployments. + PreviewWildcard *string `pulumi:"previewWildcard"` + // Directory served when `buildType` is `static`. + PublishDirectory *string `pulumi:"publishDirectory"` + // Railpack version. + RailpackVersion *string `pulumi:"railpackVersion"` + // Registry used to push the built image. + RegistryId *string `pulumi:"registryId"` + // Registry URL, when pulling a private image. + RegistryUrl *string `pulumi:"registryUrl"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // GitHub repository name. + Repository *string `pulumi:"repository"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Keep previous images so deployments can be rolled back. + RollbackActive *bool `pulumi:"rollbackActive"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Registry used to store rollback images. + RollbackRegistryId *string `pulumi:"rollbackRegistryId"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + SourceType *string `pulumi:"sourceType"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Display subtitle shown in the Dokploy UI. + Subtitle *string `pulumi:"subtitle"` + // Display title shown in the Dokploy UI. + Title *string `pulumi:"title"` + // What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + TriggerType *string `pulumi:"triggerType"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` + // Registry username, when pulling a private image. + Username *string `pulumi:"username"` + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths []string `pulumi:"watchPaths"` +} + +type ApplicationState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + AppName pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Deploy automatically when the configured trigger fires. + AutoDeploy pulumi.BoolPtrInput + // Bitbucket branch to build. + BitbucketBranch pulumi.StringPtrInput + // Path within the Bitbucket repository to build from. + BitbucketBuildPath pulumi.StringPtrInput + // ID of the configured Bitbucket provider connection. + BitbucketId pulumi.StringPtrInput + // Bitbucket repository owner. + BitbucketOwner pulumi.StringPtrInput + // Bitbucket repository name. + BitbucketRepository pulumi.StringPtrInput + // Bitbucket repository slug. + BitbucketRepositorySlug pulumi.StringPtrInput + // GitHub branch to build. + Branch pulumi.StringPtrInput + // Docker build arguments in `KEY=value` format, one per line. + BuildArgs pulumi.StringPtrInput + // Path within the GitHub repository to build from. + BuildPath pulumi.StringPtrInput + // Registry used by a dedicated build server. + BuildRegistryId pulumi.StringPtrInput + // Docker build secrets in `KEY=value` format, one per line. + BuildSecrets pulumi.StringPtrInput + // Server that performs builds, when separate from the deploy server. + BuildServerId pulumi.StringPtrInput + // How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + BuildType pulumi.StringPtrInput + // Discard the build cache on the next deployment. + CleanCache pulumi.BoolPtrInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Write the environment variables to a `.env` file in the container. + CreateEnvFile pulumi.BoolPtrInput + // RFC 3339 timestamp of when the application was created. + CreatedAt pulumi.StringPtrInput + // Branch to build for a custom Git remote. + CustomGitBranch pulumi.StringPtrInput + // Path within a custom Git repository to build from. + CustomGitBuildPath pulumi.StringPtrInput + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId pulumi.StringPtrInput + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // Target stage for a multi-stage Docker build. + DockerBuildStage pulumi.StringPtrInput + // Docker build context path. + DockerContextPath pulumi.StringPtrInput + // Docker image reference, when `sourceType` is `docker`. + DockerImage pulumi.StringPtrInput + // Path to the Dockerfile, when `buildType` is `dockerfile`. + Dockerfile pulumi.StringPtrInput + // Clone Git submodules when checking out the repository. + EnableSubmodules pulumi.BoolPtrInput + // Whether the application is enabled. + Enabled pulumi.BoolPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Runtime environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this application belongs to. + EnvironmentId pulumi.StringPtrInput + // Gitea branch to build. + GiteaBranch pulumi.StringPtrInput + // Path within the Gitea repository to build from. + GiteaBuildPath pulumi.StringPtrInput + // ID of the configured Gitea provider connection. + GiteaId pulumi.StringPtrInput + // Gitea repository owner. + GiteaOwner pulumi.StringPtrInput + // Gitea repository name. + GiteaRepository pulumi.StringPtrInput + // ID of the configured GitHub provider connection. + GithubId pulumi.StringPtrInput + // GitLab branch to build. + GitlabBranch pulumi.StringPtrInput + // Path within the GitLab repository to build from. + GitlabBuildPath pulumi.StringPtrInput + // ID of the configured GitLab provider connection. + GitlabId pulumi.StringPtrInput + // GitLab repository owner. + GitlabOwner pulumi.StringPtrInput + // Full GitLab namespace path. + GitlabPathNamespace pulumi.StringPtrInput + // Numeric GitLab project ID. + GitlabProjectId pulumi.IntPtrInput + // GitLab repository name. + GitlabRepository pulumi.StringPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Heroku buildpack stack version. + HerokuVersion pulumi.StringPtrInput + // Build a preview deployment for each pull request. + IsPreviewDeploymentsActive pulumi.BoolPtrInput + // Serve a static build as a single-page application. + IsStaticSpa pulumi.BoolPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the application. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // GitHub repository owner. + Owner pulumi.StringPtrInput + // Registry password, when pulling a private image. + Password pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Build arguments applied to preview deployments. + PreviewBuildArgs pulumi.StringPtrInput + // Build secrets applied to preview deployments. + PreviewBuildSecrets pulumi.StringPtrInput + // Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + PreviewCertificateType pulumi.StringPtrInput + // Traefik certificate resolver for preview deployments. + PreviewCustomCertResolver pulumi.StringPtrInput + // Environment variables applied to preview deployments. + PreviewEnv pulumi.StringPtrInput + // Serve preview deployments over HTTPS. + PreviewHttps pulumi.BoolPtrInput + // Pull request labels that opt into preview deployments. + PreviewLabels pulumi.StringArrayInput + // Maximum number of concurrent preview deployments. + PreviewLimit pulumi.IntPtrInput + // Base path for preview deployments. + PreviewPath pulumi.StringPtrInput + // Container port exposed by preview deployments. + PreviewPort pulumi.IntPtrInput + // Wildcard domain used to expose preview deployments. + PreviewWildcard pulumi.StringPtrInput + // Directory served when `buildType` is `static`. + PublishDirectory pulumi.StringPtrInput + // Railpack version. + RailpackVersion pulumi.StringPtrInput + // Registry used to push the built image. + RegistryId pulumi.StringPtrInput + // Registry URL, when pulling a private image. + RegistryUrl pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // GitHub repository name. + Repository pulumi.StringPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Keep previous images so deployments can be rolled back. + RollbackActive pulumi.BoolPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Registry used to store rollback images. + RollbackRegistryId pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + SourceType pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Display subtitle shown in the Dokploy UI. + Subtitle pulumi.StringPtrInput + // Display title shown in the Dokploy UI. + Title pulumi.StringPtrInput + // What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + TriggerType pulumi.StringPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput + // Registry username, when pulling a private image. + Username pulumi.StringPtrInput + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths pulumi.StringArrayInput +} + +func (ApplicationState) ElementType() reflect.Type { + return reflect.TypeOf((*applicationState)(nil)).Elem() +} + +type applicationArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + AppName *string `pulumi:"appName"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Deploy automatically when the configured trigger fires. + AutoDeploy *bool `pulumi:"autoDeploy"` + // Bitbucket branch to build. + BitbucketBranch *string `pulumi:"bitbucketBranch"` + // Path within the Bitbucket repository to build from. + BitbucketBuildPath *string `pulumi:"bitbucketBuildPath"` + // ID of the configured Bitbucket provider connection. + BitbucketId *string `pulumi:"bitbucketId"` + // Bitbucket repository owner. + BitbucketOwner *string `pulumi:"bitbucketOwner"` + // Bitbucket repository name. + BitbucketRepository *string `pulumi:"bitbucketRepository"` + // Bitbucket repository slug. + BitbucketRepositorySlug *string `pulumi:"bitbucketRepositorySlug"` + // GitHub branch to build. + Branch *string `pulumi:"branch"` + // Docker build arguments in `KEY=value` format, one per line. + BuildArgs *string `pulumi:"buildArgs"` + // Path within the GitHub repository to build from. + BuildPath *string `pulumi:"buildPath"` + // Registry used by a dedicated build server. + BuildRegistryId *string `pulumi:"buildRegistryId"` + // Docker build secrets in `KEY=value` format, one per line. + BuildSecrets *string `pulumi:"buildSecrets"` + // Server that performs builds, when separate from the deploy server. + BuildServerId *string `pulumi:"buildServerId"` + // How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + BuildType *string `pulumi:"buildType"` + // Discard the build cache on the next deployment. + CleanCache *bool `pulumi:"cleanCache"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Write the environment variables to a `.env` file in the container. + CreateEnvFile *bool `pulumi:"createEnvFile"` + // Branch to build for a custom Git remote. + CustomGitBranch *string `pulumi:"customGitBranch"` + // Path within a custom Git repository to build from. + CustomGitBuildPath *string `pulumi:"customGitBuildPath"` + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId *string `pulumi:"customGitSshKeyId"` + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl *string `pulumi:"customGitUrl"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // Target stage for a multi-stage Docker build. + DockerBuildStage *string `pulumi:"dockerBuildStage"` + // Docker build context path. + DockerContextPath *string `pulumi:"dockerContextPath"` + // Docker image reference, when `sourceType` is `docker`. + DockerImage *string `pulumi:"dockerImage"` + // Path to the Dockerfile, when `buildType` is `dockerfile`. + Dockerfile *string `pulumi:"dockerfile"` + // Clone Git submodules when checking out the repository. + EnableSubmodules *bool `pulumi:"enableSubmodules"` + // Whether the application is enabled. + Enabled *bool `pulumi:"enabled"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Runtime environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this application belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Gitea branch to build. + GiteaBranch *string `pulumi:"giteaBranch"` + // Path within the Gitea repository to build from. + GiteaBuildPath *string `pulumi:"giteaBuildPath"` + // ID of the configured Gitea provider connection. + GiteaId *string `pulumi:"giteaId"` + // Gitea repository owner. + GiteaOwner *string `pulumi:"giteaOwner"` + // Gitea repository name. + GiteaRepository *string `pulumi:"giteaRepository"` + // ID of the configured GitHub provider connection. + GithubId *string `pulumi:"githubId"` + // GitLab branch to build. + GitlabBranch *string `pulumi:"gitlabBranch"` + // Path within the GitLab repository to build from. + GitlabBuildPath *string `pulumi:"gitlabBuildPath"` + // ID of the configured GitLab provider connection. + GitlabId *string `pulumi:"gitlabId"` + // GitLab repository owner. + GitlabOwner *string `pulumi:"gitlabOwner"` + // Full GitLab namespace path. + GitlabPathNamespace *string `pulumi:"gitlabPathNamespace"` + // Numeric GitLab project ID. + GitlabProjectId *int `pulumi:"gitlabProjectId"` + // GitLab repository name. + GitlabRepository *string `pulumi:"gitlabRepository"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Heroku buildpack stack version. + HerokuVersion *string `pulumi:"herokuVersion"` + // Build a preview deployment for each pull request. + IsPreviewDeploymentsActive *bool `pulumi:"isPreviewDeploymentsActive"` + // Serve a static build as a single-page application. + IsStaticSpa *bool `pulumi:"isStaticSpa"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the application. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // GitHub repository owner. + Owner *string `pulumi:"owner"` + // Registry password, when pulling a private image. + Password *string `pulumi:"password"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Build arguments applied to preview deployments. + PreviewBuildArgs *string `pulumi:"previewBuildArgs"` + // Build secrets applied to preview deployments. + PreviewBuildSecrets *string `pulumi:"previewBuildSecrets"` + // Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + PreviewCertificateType *string `pulumi:"previewCertificateType"` + // Traefik certificate resolver for preview deployments. + PreviewCustomCertResolver *string `pulumi:"previewCustomCertResolver"` + // Environment variables applied to preview deployments. + PreviewEnv *string `pulumi:"previewEnv"` + // Serve preview deployments over HTTPS. + PreviewHttps *bool `pulumi:"previewHttps"` + // Pull request labels that opt into preview deployments. + PreviewLabels []string `pulumi:"previewLabels"` + // Maximum number of concurrent preview deployments. + PreviewLimit *int `pulumi:"previewLimit"` + // Base path for preview deployments. + PreviewPath *string `pulumi:"previewPath"` + // Container port exposed by preview deployments. + PreviewPort *int `pulumi:"previewPort"` + // Wildcard domain used to expose preview deployments. + PreviewWildcard *string `pulumi:"previewWildcard"` + // Directory served when `buildType` is `static`. + PublishDirectory *string `pulumi:"publishDirectory"` + // Railpack version. + RailpackVersion *string `pulumi:"railpackVersion"` + // Registry used to push the built image. + RegistryId *string `pulumi:"registryId"` + // Registry URL, when pulling a private image. + RegistryUrl *string `pulumi:"registryUrl"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // GitHub repository name. + Repository *string `pulumi:"repository"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Keep previous images so deployments can be rolled back. + RollbackActive *bool `pulumi:"rollbackActive"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Registry used to store rollback images. + RollbackRegistryId *string `pulumi:"rollbackRegistryId"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + SourceType *string `pulumi:"sourceType"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Display subtitle shown in the Dokploy UI. + Subtitle *string `pulumi:"subtitle"` + // Display title shown in the Dokploy UI. + Title *string `pulumi:"title"` + // What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + TriggerType *string `pulumi:"triggerType"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` + // Registry username, when pulling a private image. + Username *string `pulumi:"username"` + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths []string `pulumi:"watchPaths"` +} + +// The set of arguments for constructing a Application resource. +type ApplicationArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + AppName pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Deploy automatically when the configured trigger fires. + AutoDeploy pulumi.BoolPtrInput + // Bitbucket branch to build. + BitbucketBranch pulumi.StringPtrInput + // Path within the Bitbucket repository to build from. + BitbucketBuildPath pulumi.StringPtrInput + // ID of the configured Bitbucket provider connection. + BitbucketId pulumi.StringPtrInput + // Bitbucket repository owner. + BitbucketOwner pulumi.StringPtrInput + // Bitbucket repository name. + BitbucketRepository pulumi.StringPtrInput + // Bitbucket repository slug. + BitbucketRepositorySlug pulumi.StringPtrInput + // GitHub branch to build. + Branch pulumi.StringPtrInput + // Docker build arguments in `KEY=value` format, one per line. + BuildArgs pulumi.StringPtrInput + // Path within the GitHub repository to build from. + BuildPath pulumi.StringPtrInput + // Registry used by a dedicated build server. + BuildRegistryId pulumi.StringPtrInput + // Docker build secrets in `KEY=value` format, one per line. + BuildSecrets pulumi.StringPtrInput + // Server that performs builds, when separate from the deploy server. + BuildServerId pulumi.StringPtrInput + // How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + BuildType pulumi.StringPtrInput + // Discard the build cache on the next deployment. + CleanCache pulumi.BoolPtrInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Write the environment variables to a `.env` file in the container. + CreateEnvFile pulumi.BoolPtrInput + // Branch to build for a custom Git remote. + CustomGitBranch pulumi.StringPtrInput + // Path within a custom Git repository to build from. + CustomGitBuildPath pulumi.StringPtrInput + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId pulumi.StringPtrInput + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // Target stage for a multi-stage Docker build. + DockerBuildStage pulumi.StringPtrInput + // Docker build context path. + DockerContextPath pulumi.StringPtrInput + // Docker image reference, when `sourceType` is `docker`. + DockerImage pulumi.StringPtrInput + // Path to the Dockerfile, when `buildType` is `dockerfile`. + Dockerfile pulumi.StringPtrInput + // Clone Git submodules when checking out the repository. + EnableSubmodules pulumi.BoolPtrInput + // Whether the application is enabled. + Enabled pulumi.BoolPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Runtime environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this application belongs to. + EnvironmentId pulumi.StringInput + // Gitea branch to build. + GiteaBranch pulumi.StringPtrInput + // Path within the Gitea repository to build from. + GiteaBuildPath pulumi.StringPtrInput + // ID of the configured Gitea provider connection. + GiteaId pulumi.StringPtrInput + // Gitea repository owner. + GiteaOwner pulumi.StringPtrInput + // Gitea repository name. + GiteaRepository pulumi.StringPtrInput + // ID of the configured GitHub provider connection. + GithubId pulumi.StringPtrInput + // GitLab branch to build. + GitlabBranch pulumi.StringPtrInput + // Path within the GitLab repository to build from. + GitlabBuildPath pulumi.StringPtrInput + // ID of the configured GitLab provider connection. + GitlabId pulumi.StringPtrInput + // GitLab repository owner. + GitlabOwner pulumi.StringPtrInput + // Full GitLab namespace path. + GitlabPathNamespace pulumi.StringPtrInput + // Numeric GitLab project ID. + GitlabProjectId pulumi.IntPtrInput + // GitLab repository name. + GitlabRepository pulumi.StringPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Heroku buildpack stack version. + HerokuVersion pulumi.StringPtrInput + // Build a preview deployment for each pull request. + IsPreviewDeploymentsActive pulumi.BoolPtrInput + // Serve a static build as a single-page application. + IsStaticSpa pulumi.BoolPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the application. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // GitHub repository owner. + Owner pulumi.StringPtrInput + // Registry password, when pulling a private image. + Password pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Build arguments applied to preview deployments. + PreviewBuildArgs pulumi.StringPtrInput + // Build secrets applied to preview deployments. + PreviewBuildSecrets pulumi.StringPtrInput + // Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + PreviewCertificateType pulumi.StringPtrInput + // Traefik certificate resolver for preview deployments. + PreviewCustomCertResolver pulumi.StringPtrInput + // Environment variables applied to preview deployments. + PreviewEnv pulumi.StringPtrInput + // Serve preview deployments over HTTPS. + PreviewHttps pulumi.BoolPtrInput + // Pull request labels that opt into preview deployments. + PreviewLabels pulumi.StringArrayInput + // Maximum number of concurrent preview deployments. + PreviewLimit pulumi.IntPtrInput + // Base path for preview deployments. + PreviewPath pulumi.StringPtrInput + // Container port exposed by preview deployments. + PreviewPort pulumi.IntPtrInput + // Wildcard domain used to expose preview deployments. + PreviewWildcard pulumi.StringPtrInput + // Directory served when `buildType` is `static`. + PublishDirectory pulumi.StringPtrInput + // Railpack version. + RailpackVersion pulumi.StringPtrInput + // Registry used to push the built image. + RegistryId pulumi.StringPtrInput + // Registry URL, when pulling a private image. + RegistryUrl pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // GitHub repository name. + Repository pulumi.StringPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Keep previous images so deployments can be rolled back. + RollbackActive pulumi.BoolPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Registry used to store rollback images. + RollbackRegistryId pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + SourceType pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Display subtitle shown in the Dokploy UI. + Subtitle pulumi.StringPtrInput + // Display title shown in the Dokploy UI. + Title pulumi.StringPtrInput + // What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + TriggerType pulumi.StringPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput + // Registry username, when pulling a private image. + Username pulumi.StringPtrInput + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths pulumi.StringArrayInput +} + +func (ApplicationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*applicationArgs)(nil)).Elem() +} + +type ApplicationInput interface { + pulumi.Input + + ToApplicationOutput() ApplicationOutput + ToApplicationOutputWithContext(ctx context.Context) ApplicationOutput +} + +func (*Application) ElementType() reflect.Type { + return reflect.TypeOf((**Application)(nil)).Elem() +} + +func (i *Application) ToApplicationOutput() ApplicationOutput { + return i.ToApplicationOutputWithContext(context.Background()) +} + +func (i *Application) ToApplicationOutputWithContext(ctx context.Context) ApplicationOutput { + return pulumi.ToOutputWithContext(ctx, i).(ApplicationOutput) +} + +// ApplicationArrayInput is an input type that accepts ApplicationArray and ApplicationArrayOutput values. +// You can construct a concrete instance of `ApplicationArrayInput` via: +// +// ApplicationArray{ ApplicationArgs{...} } +type ApplicationArrayInput interface { + pulumi.Input + + ToApplicationArrayOutput() ApplicationArrayOutput + ToApplicationArrayOutputWithContext(context.Context) ApplicationArrayOutput +} + +type ApplicationArray []ApplicationInput + +func (ApplicationArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Application)(nil)).Elem() +} + +func (i ApplicationArray) ToApplicationArrayOutput() ApplicationArrayOutput { + return i.ToApplicationArrayOutputWithContext(context.Background()) +} + +func (i ApplicationArray) ToApplicationArrayOutputWithContext(ctx context.Context) ApplicationArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ApplicationArrayOutput) +} + +// ApplicationMapInput is an input type that accepts ApplicationMap and ApplicationMapOutput values. +// You can construct a concrete instance of `ApplicationMapInput` via: +// +// ApplicationMap{ "key": ApplicationArgs{...} } +type ApplicationMapInput interface { + pulumi.Input + + ToApplicationMapOutput() ApplicationMapOutput + ToApplicationMapOutputWithContext(context.Context) ApplicationMapOutput +} + +type ApplicationMap map[string]ApplicationInput + +func (ApplicationMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Application)(nil)).Elem() +} + +func (i ApplicationMap) ToApplicationMapOutput() ApplicationMapOutput { + return i.ToApplicationMapOutputWithContext(context.Background()) +} + +func (i ApplicationMap) ToApplicationMapOutputWithContext(ctx context.Context) ApplicationMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ApplicationMapOutput) +} + +type ApplicationOutput struct{ *pulumi.OutputState } + +func (ApplicationOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Application)(nil)).Elem() +} + +func (o ApplicationOutput) ToApplicationOutput() ApplicationOutput { + return o +} + +func (o ApplicationOutput) ToApplicationOutputWithContext(ctx context.Context) ApplicationOutput { + return o +} + +// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. +func (o ApplicationOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o ApplicationOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +// Arguments appended to the container command. +func (o ApplicationOutput) Args() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Application) pulumi.StringArrayOutput { return v.Args }).(pulumi.StringArrayOutput) +} + +// Deploy automatically when the configured trigger fires. +func (o ApplicationOutput) AutoDeploy() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.AutoDeploy }).(pulumi.BoolOutput) +} + +// Bitbucket branch to build. +func (o ApplicationOutput) BitbucketBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BitbucketBranch }).(pulumi.StringPtrOutput) +} + +// Path within the Bitbucket repository to build from. +func (o ApplicationOutput) BitbucketBuildPath() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.BitbucketBuildPath }).(pulumi.StringOutput) +} + +// ID of the configured Bitbucket provider connection. +func (o ApplicationOutput) BitbucketId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BitbucketId }).(pulumi.StringPtrOutput) +} + +// Bitbucket repository owner. +func (o ApplicationOutput) BitbucketOwner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BitbucketOwner }).(pulumi.StringPtrOutput) +} + +// Bitbucket repository name. +func (o ApplicationOutput) BitbucketRepository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BitbucketRepository }).(pulumi.StringPtrOutput) +} + +// Bitbucket repository slug. +func (o ApplicationOutput) BitbucketRepositorySlug() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BitbucketRepositorySlug }).(pulumi.StringPtrOutput) +} + +// GitHub branch to build. +func (o ApplicationOutput) Branch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Branch }).(pulumi.StringPtrOutput) +} + +// Docker build arguments in `KEY=value` format, one per line. +func (o ApplicationOutput) BuildArgs() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BuildArgs }).(pulumi.StringPtrOutput) +} + +// Path within the GitHub repository to build from. +func (o ApplicationOutput) BuildPath() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.BuildPath }).(pulumi.StringOutput) +} + +// Registry used by a dedicated build server. +func (o ApplicationOutput) BuildRegistryId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BuildRegistryId }).(pulumi.StringPtrOutput) +} + +// Docker build secrets in `KEY=value` format, one per line. +func (o ApplicationOutput) BuildSecrets() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.BuildSecrets }).(pulumi.StringOutput) +} + +// Server that performs builds, when separate from the deploy server. +func (o ApplicationOutput) BuildServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.BuildServerId }).(pulumi.StringPtrOutput) +} + +// How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. +func (o ApplicationOutput) BuildType() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.BuildType }).(pulumi.StringOutput) +} + +// Discard the build cache on the next deployment. +func (o ApplicationOutput) CleanCache() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.CleanCache }).(pulumi.BoolOutput) +} + +// Override the container entrypoint command. +func (o ApplicationOutput) Command() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Command }).(pulumi.StringPtrOutput) +} + +// Hard CPU limit, for example `1`. +func (o ApplicationOutput) CpuLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.CpuLimit }).(pulumi.StringPtrOutput) +} + +// Soft CPU reservation, for example `0.5`. +func (o ApplicationOutput) CpuReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.CpuReservation }).(pulumi.StringPtrOutput) +} + +// Write the environment variables to a `.env` file in the container. +func (o ApplicationOutput) CreateEnvFile() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.CreateEnvFile }).(pulumi.BoolOutput) +} + +// RFC 3339 timestamp of when the application was created. +func (o ApplicationOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Branch to build for a custom Git remote. +func (o ApplicationOutput) CustomGitBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.CustomGitBranch }).(pulumi.StringPtrOutput) +} + +// Path within a custom Git repository to build from. +func (o ApplicationOutput) CustomGitBuildPath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.CustomGitBuildPath }).(pulumi.StringPtrOutput) +} + +// SSH key used to clone a private custom Git remote. +func (o ApplicationOutput) CustomGitSshKeyId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.CustomGitSshKeyId }).(pulumi.StringPtrOutput) +} + +// Git remote URL, when `sourceType` is `git`. +func (o ApplicationOutput) CustomGitUrl() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.CustomGitUrl }).(pulumi.StringPtrOutput) +} + +// Free-form description. +func (o ApplicationOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Detach the service from the shared `dokploy-network`. +func (o ApplicationOutput) DetachDokployNetwork() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.DetachDokployNetwork }).(pulumi.BoolOutput) +} + +// Target stage for a multi-stage Docker build. +func (o ApplicationOutput) DockerBuildStage() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.DockerBuildStage }).(pulumi.StringPtrOutput) +} + +// Docker build context path. +func (o ApplicationOutput) DockerContextPath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.DockerContextPath }).(pulumi.StringPtrOutput) +} + +// Docker image reference, when `sourceType` is `docker`. +func (o ApplicationOutput) DockerImage() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.DockerImage }).(pulumi.StringPtrOutput) +} + +// Path to the Dockerfile, when `buildType` is `dockerfile`. +func (o ApplicationOutput) Dockerfile() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.Dockerfile }).(pulumi.StringOutput) +} + +// Clone Git submodules when checking out the repository. +func (o ApplicationOutput) EnableSubmodules() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.EnableSubmodules }).(pulumi.BoolOutput) +} + +// Whether the application is enabled. +func (o ApplicationOutput) Enabled() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.Enabled }).(pulumi.BoolOutput) +} + +// Docker Swarm endpoint specification, as a JSON object. +func (o ApplicationOutput) EndpointSpecSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.EndpointSpecSwarm }).(pulumi.StringPtrOutput) +} + +// Runtime environment variables in `KEY=value` format, one per line. +func (o ApplicationOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this application belongs to. +func (o ApplicationOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Gitea branch to build. +func (o ApplicationOutput) GiteaBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GiteaBranch }).(pulumi.StringPtrOutput) +} + +// Path within the Gitea repository to build from. +func (o ApplicationOutput) GiteaBuildPath() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.GiteaBuildPath }).(pulumi.StringOutput) +} + +// ID of the configured Gitea provider connection. +func (o ApplicationOutput) GiteaId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GiteaId }).(pulumi.StringPtrOutput) +} + +// Gitea repository owner. +func (o ApplicationOutput) GiteaOwner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GiteaOwner }).(pulumi.StringPtrOutput) +} + +// Gitea repository name. +func (o ApplicationOutput) GiteaRepository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GiteaRepository }).(pulumi.StringPtrOutput) +} + +// ID of the configured GitHub provider connection. +func (o ApplicationOutput) GithubId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GithubId }).(pulumi.StringPtrOutput) +} + +// GitLab branch to build. +func (o ApplicationOutput) GitlabBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GitlabBranch }).(pulumi.StringPtrOutput) +} + +// Path within the GitLab repository to build from. +func (o ApplicationOutput) GitlabBuildPath() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.GitlabBuildPath }).(pulumi.StringOutput) +} + +// ID of the configured GitLab provider connection. +func (o ApplicationOutput) GitlabId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GitlabId }).(pulumi.StringPtrOutput) +} + +// GitLab repository owner. +func (o ApplicationOutput) GitlabOwner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GitlabOwner }).(pulumi.StringPtrOutput) +} + +// Full GitLab namespace path. +func (o ApplicationOutput) GitlabPathNamespace() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GitlabPathNamespace }).(pulumi.StringPtrOutput) +} + +// Numeric GitLab project ID. +func (o ApplicationOutput) GitlabProjectId() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Application) pulumi.IntPtrOutput { return v.GitlabProjectId }).(pulumi.IntPtrOutput) +} + +// GitLab repository name. +func (o ApplicationOutput) GitlabRepository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.GitlabRepository }).(pulumi.StringPtrOutput) +} + +// Docker Swarm health check configuration, as a JSON object. +func (o ApplicationOutput) HealthCheckSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.HealthCheckSwarm }).(pulumi.StringPtrOutput) +} + +// Heroku buildpack stack version. +func (o ApplicationOutput) HerokuVersion() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.HerokuVersion }).(pulumi.StringOutput) +} + +// Build a preview deployment for each pull request. +func (o ApplicationOutput) IsPreviewDeploymentsActive() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.IsPreviewDeploymentsActive }).(pulumi.BoolOutput) +} + +// Serve a static build as a single-page application. +func (o ApplicationOutput) IsStaticSpa() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.IsStaticSpa }).(pulumi.BoolOutput) +} + +// Docker Swarm service labels, as a JSON object. +func (o ApplicationOutput) LabelsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.LabelsSwarm }).(pulumi.StringPtrOutput) +} + +// Hard memory limit, for example `512m`. +func (o ApplicationOutput) MemoryLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.MemoryLimit }).(pulumi.StringPtrOutput) +} + +// Soft memory reservation, for example `256m`. +func (o ApplicationOutput) MemoryReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.MemoryReservation }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service mode, as a JSON object. +func (o ApplicationOutput) ModeSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.ModeSwarm }).(pulumi.StringPtrOutput) +} + +// Display name of the application. +func (o ApplicationOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// IDs of additional Docker networks to attach. +func (o ApplicationOutput) NetworkIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Application) pulumi.StringArrayOutput { return v.NetworkIds }).(pulumi.StringArrayOutput) +} + +// Docker Swarm network attachments, as a JSON array. +func (o ApplicationOutput) NetworkSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.NetworkSwarm }).(pulumi.StringPtrOutput) +} + +// GitHub repository owner. +func (o ApplicationOutput) Owner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Owner }).(pulumi.StringPtrOutput) +} + +// Registry password, when pulling a private image. +func (o ApplicationOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.Password }).(pulumi.StringOutput) +} + +// Docker Swarm placement constraints, as a JSON object. +func (o ApplicationOutput) PlacementSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.PlacementSwarm }).(pulumi.StringPtrOutput) +} + +// Build arguments applied to preview deployments. +func (o ApplicationOutput) PreviewBuildArgs() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.PreviewBuildArgs }).(pulumi.StringPtrOutput) +} + +// Build secrets applied to preview deployments. +func (o ApplicationOutput) PreviewBuildSecrets() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.PreviewBuildSecrets }).(pulumi.StringOutput) +} + +// Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. +func (o ApplicationOutput) PreviewCertificateType() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.PreviewCertificateType }).(pulumi.StringOutput) +} + +// Traefik certificate resolver for preview deployments. +func (o ApplicationOutput) PreviewCustomCertResolver() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.PreviewCustomCertResolver }).(pulumi.StringPtrOutput) +} + +// Environment variables applied to preview deployments. +func (o ApplicationOutput) PreviewEnv() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.PreviewEnv }).(pulumi.StringPtrOutput) +} + +// Serve preview deployments over HTTPS. +func (o ApplicationOutput) PreviewHttps() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.PreviewHttps }).(pulumi.BoolOutput) +} + +// Pull request labels that opt into preview deployments. +func (o ApplicationOutput) PreviewLabels() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Application) pulumi.StringArrayOutput { return v.PreviewLabels }).(pulumi.StringArrayOutput) +} + +// Maximum number of concurrent preview deployments. +func (o ApplicationOutput) PreviewLimit() pulumi.IntOutput { + return o.ApplyT(func(v *Application) pulumi.IntOutput { return v.PreviewLimit }).(pulumi.IntOutput) +} + +// Base path for preview deployments. +func (o ApplicationOutput) PreviewPath() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.PreviewPath }).(pulumi.StringOutput) +} + +// Container port exposed by preview deployments. +func (o ApplicationOutput) PreviewPort() pulumi.IntOutput { + return o.ApplyT(func(v *Application) pulumi.IntOutput { return v.PreviewPort }).(pulumi.IntOutput) +} + +// Wildcard domain used to expose preview deployments. +func (o ApplicationOutput) PreviewWildcard() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.PreviewWildcard }).(pulumi.StringPtrOutput) +} + +// Directory served when `buildType` is `static`. +func (o ApplicationOutput) PublishDirectory() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.PublishDirectory }).(pulumi.StringPtrOutput) +} + +// Railpack version. +func (o ApplicationOutput) RailpackVersion() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.RailpackVersion }).(pulumi.StringOutput) +} + +// Registry used to push the built image. +func (o ApplicationOutput) RegistryId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.RegistryId }).(pulumi.StringPtrOutput) +} + +// Registry URL, when pulling a private image. +func (o ApplicationOutput) RegistryUrl() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.RegistryUrl }).(pulumi.StringPtrOutput) +} + +// Number of replicas to run. +func (o ApplicationOutput) Replicas() pulumi.IntOutput { + return o.ApplyT(func(v *Application) pulumi.IntOutput { return v.Replicas }).(pulumi.IntOutput) +} + +// GitHub repository name. +func (o ApplicationOutput) Repository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Repository }).(pulumi.StringPtrOutput) +} + +// Docker Swarm restart policy, as a JSON object. +func (o ApplicationOutput) RestartPolicySwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.RestartPolicySwarm }).(pulumi.StringPtrOutput) +} + +// Keep previous images so deployments can be rolled back. +func (o ApplicationOutput) RollbackActive() pulumi.BoolOutput { + return o.ApplyT(func(v *Application) pulumi.BoolOutput { return v.RollbackActive }).(pulumi.BoolOutput) +} + +// Docker Swarm rollback configuration, as a JSON object. +func (o ApplicationOutput) RollbackConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.RollbackConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Registry used to store rollback images. +func (o ApplicationOutput) RollbackRegistryId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.RollbackRegistryId }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o ApplicationOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. +func (o ApplicationOutput) SourceType() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.SourceType }).(pulumi.StringOutput) +} + +// Grace period in nanoseconds before a container is killed. +func (o ApplicationOutput) StopGracePeriodSwarm() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Application) pulumi.IntPtrOutput { return v.StopGracePeriodSwarm }).(pulumi.IntPtrOutput) +} + +// Display subtitle shown in the Dokploy UI. +func (o ApplicationOutput) Subtitle() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Subtitle }).(pulumi.StringPtrOutput) +} + +// Display title shown in the Dokploy UI. +func (o ApplicationOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Title }).(pulumi.StringPtrOutput) +} + +// What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. +func (o ApplicationOutput) TriggerType() pulumi.StringOutput { + return o.ApplyT(func(v *Application) pulumi.StringOutput { return v.TriggerType }).(pulumi.StringOutput) +} + +// Docker Swarm ulimits, as a JSON object. +func (o ApplicationOutput) UlimitsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.UlimitsSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rolling update configuration, as a JSON object. +func (o ApplicationOutput) UpdateConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.UpdateConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Registry username, when pulling a private image. +func (o ApplicationOutput) Username() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Application) pulumi.StringPtrOutput { return v.Username }).(pulumi.StringPtrOutput) +} + +// Glob patterns that limit which changed paths trigger an automatic deployment. +func (o ApplicationOutput) WatchPaths() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Application) pulumi.StringArrayOutput { return v.WatchPaths }).(pulumi.StringArrayOutput) +} + +type ApplicationArrayOutput struct{ *pulumi.OutputState } + +func (ApplicationArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Application)(nil)).Elem() +} + +func (o ApplicationArrayOutput) ToApplicationArrayOutput() ApplicationArrayOutput { + return o +} + +func (o ApplicationArrayOutput) ToApplicationArrayOutputWithContext(ctx context.Context) ApplicationArrayOutput { + return o +} + +func (o ApplicationArrayOutput) Index(i pulumi.IntInput) ApplicationOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Application { + return vs[0].([]*Application)[vs[1].(int)] + }).(ApplicationOutput) +} + +type ApplicationMapOutput struct{ *pulumi.OutputState } + +func (ApplicationMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Application)(nil)).Elem() +} + +func (o ApplicationMapOutput) ToApplicationMapOutput() ApplicationMapOutput { + return o +} + +func (o ApplicationMapOutput) ToApplicationMapOutputWithContext(ctx context.Context) ApplicationMapOutput { + return o +} + +func (o ApplicationMapOutput) MapIndex(k pulumi.StringInput) ApplicationOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Application { + return vs[0].(map[string]*Application)[vs[1].(string)] + }).(ApplicationOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ApplicationInput)(nil)).Elem(), &Application{}) + pulumi.RegisterInputType(reflect.TypeOf((*ApplicationArrayInput)(nil)).Elem(), ApplicationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ApplicationMapInput)(nil)).Elem(), ApplicationMap{}) + pulumi.RegisterOutputType(ApplicationOutput{}) + pulumi.RegisterOutputType(ApplicationArrayOutput{}) + pulumi.RegisterOutputType(ApplicationMapOutput{}) +} diff --git a/sdk/go/dokploy/certificate.go b/sdk/go/dokploy/certificate.go new file mode 100644 index 0000000..e5daf3e --- /dev/null +++ b/sdk/go/dokploy/certificate.go @@ -0,0 +1,299 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Certificate struct { + pulumi.CustomResourceState + + // Whether Dokploy should renew this certificate automatically. + AutoRenew pulumi.BoolOutput `pulumi:"autoRenew"` + // PEM-encoded certificate chain. + CertificateData pulumi.StringOutput `pulumi:"certificateData"` + // Path where Dokploy writes the certificate on disk. + CertificatePath pulumi.StringOutput `pulumi:"certificatePath"` + // Display name of the certificate. + Name pulumi.StringOutput `pulumi:"name"` + // PEM-encoded private key. + PrivateKey pulumi.StringOutput `pulumi:"privateKey"` + // Server this certificate is installed on. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` +} + +// NewCertificate registers a new resource with the given unique name, arguments, and options. +func NewCertificate(ctx *pulumi.Context, + name string, args *CertificateArgs, opts ...pulumi.ResourceOption) (*Certificate, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CertificateData == nil { + return nil, errors.New("invalid value for required argument 'CertificateData'") + } + if args.PrivateKey == nil { + return nil, errors.New("invalid value for required argument 'PrivateKey'") + } + if args.PrivateKey != nil { + args.PrivateKey = pulumi.ToSecret(args.PrivateKey).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "privateKey", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Certificate + err := ctx.RegisterResource("dokploy:index/certificate:Certificate", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetCertificate gets an existing Certificate resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetCertificate(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *CertificateState, opts ...pulumi.ResourceOption) (*Certificate, error) { + var resource Certificate + err := ctx.ReadResource("dokploy:index/certificate:Certificate", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Certificate resources. +type certificateState struct { + // Whether Dokploy should renew this certificate automatically. + AutoRenew *bool `pulumi:"autoRenew"` + // PEM-encoded certificate chain. + CertificateData *string `pulumi:"certificateData"` + // Path where Dokploy writes the certificate on disk. + CertificatePath *string `pulumi:"certificatePath"` + // Display name of the certificate. + Name *string `pulumi:"name"` + // PEM-encoded private key. + PrivateKey *string `pulumi:"privateKey"` + // Server this certificate is installed on. + ServerId *string `pulumi:"serverId"` +} + +type CertificateState struct { + // Whether Dokploy should renew this certificate automatically. + AutoRenew pulumi.BoolPtrInput + // PEM-encoded certificate chain. + CertificateData pulumi.StringPtrInput + // Path where Dokploy writes the certificate on disk. + CertificatePath pulumi.StringPtrInput + // Display name of the certificate. + Name pulumi.StringPtrInput + // PEM-encoded private key. + PrivateKey pulumi.StringPtrInput + // Server this certificate is installed on. + ServerId pulumi.StringPtrInput +} + +func (CertificateState) ElementType() reflect.Type { + return reflect.TypeOf((*certificateState)(nil)).Elem() +} + +type certificateArgs struct { + // Whether Dokploy should renew this certificate automatically. + AutoRenew *bool `pulumi:"autoRenew"` + // PEM-encoded certificate chain. + CertificateData string `pulumi:"certificateData"` + // Display name of the certificate. + Name *string `pulumi:"name"` + // PEM-encoded private key. + PrivateKey string `pulumi:"privateKey"` + // Server this certificate is installed on. + ServerId *string `pulumi:"serverId"` +} + +// The set of arguments for constructing a Certificate resource. +type CertificateArgs struct { + // Whether Dokploy should renew this certificate automatically. + AutoRenew pulumi.BoolPtrInput + // PEM-encoded certificate chain. + CertificateData pulumi.StringInput + // Display name of the certificate. + Name pulumi.StringPtrInput + // PEM-encoded private key. + PrivateKey pulumi.StringInput + // Server this certificate is installed on. + ServerId pulumi.StringPtrInput +} + +func (CertificateArgs) ElementType() reflect.Type { + return reflect.TypeOf((*certificateArgs)(nil)).Elem() +} + +type CertificateInput interface { + pulumi.Input + + ToCertificateOutput() CertificateOutput + ToCertificateOutputWithContext(ctx context.Context) CertificateOutput +} + +func (*Certificate) ElementType() reflect.Type { + return reflect.TypeOf((**Certificate)(nil)).Elem() +} + +func (i *Certificate) ToCertificateOutput() CertificateOutput { + return i.ToCertificateOutputWithContext(context.Background()) +} + +func (i *Certificate) ToCertificateOutputWithContext(ctx context.Context) CertificateOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateOutput) +} + +// CertificateArrayInput is an input type that accepts CertificateArray and CertificateArrayOutput values. +// You can construct a concrete instance of `CertificateArrayInput` via: +// +// CertificateArray{ CertificateArgs{...} } +type CertificateArrayInput interface { + pulumi.Input + + ToCertificateArrayOutput() CertificateArrayOutput + ToCertificateArrayOutputWithContext(context.Context) CertificateArrayOutput +} + +type CertificateArray []CertificateInput + +func (CertificateArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Certificate)(nil)).Elem() +} + +func (i CertificateArray) ToCertificateArrayOutput() CertificateArrayOutput { + return i.ToCertificateArrayOutputWithContext(context.Background()) +} + +func (i CertificateArray) ToCertificateArrayOutputWithContext(ctx context.Context) CertificateArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateArrayOutput) +} + +// CertificateMapInput is an input type that accepts CertificateMap and CertificateMapOutput values. +// You can construct a concrete instance of `CertificateMapInput` via: +// +// CertificateMap{ "key": CertificateArgs{...} } +type CertificateMapInput interface { + pulumi.Input + + ToCertificateMapOutput() CertificateMapOutput + ToCertificateMapOutputWithContext(context.Context) CertificateMapOutput +} + +type CertificateMap map[string]CertificateInput + +func (CertificateMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Certificate)(nil)).Elem() +} + +func (i CertificateMap) ToCertificateMapOutput() CertificateMapOutput { + return i.ToCertificateMapOutputWithContext(context.Background()) +} + +func (i CertificateMap) ToCertificateMapOutputWithContext(ctx context.Context) CertificateMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateMapOutput) +} + +type CertificateOutput struct{ *pulumi.OutputState } + +func (CertificateOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Certificate)(nil)).Elem() +} + +func (o CertificateOutput) ToCertificateOutput() CertificateOutput { + return o +} + +func (o CertificateOutput) ToCertificateOutputWithContext(ctx context.Context) CertificateOutput { + return o +} + +// Whether Dokploy should renew this certificate automatically. +func (o CertificateOutput) AutoRenew() pulumi.BoolOutput { + return o.ApplyT(func(v *Certificate) pulumi.BoolOutput { return v.AutoRenew }).(pulumi.BoolOutput) +} + +// PEM-encoded certificate chain. +func (o CertificateOutput) CertificateData() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.CertificateData }).(pulumi.StringOutput) +} + +// Path where Dokploy writes the certificate on disk. +func (o CertificateOutput) CertificatePath() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.CertificatePath }).(pulumi.StringOutput) +} + +// Display name of the certificate. +func (o CertificateOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// PEM-encoded private key. +func (o CertificateOutput) PrivateKey() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.PrivateKey }).(pulumi.StringOutput) +} + +// Server this certificate is installed on. +func (o CertificateOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +type CertificateArrayOutput struct{ *pulumi.OutputState } + +func (CertificateArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Certificate)(nil)).Elem() +} + +func (o CertificateArrayOutput) ToCertificateArrayOutput() CertificateArrayOutput { + return o +} + +func (o CertificateArrayOutput) ToCertificateArrayOutputWithContext(ctx context.Context) CertificateArrayOutput { + return o +} + +func (o CertificateArrayOutput) Index(i pulumi.IntInput) CertificateOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Certificate { + return vs[0].([]*Certificate)[vs[1].(int)] + }).(CertificateOutput) +} + +type CertificateMapOutput struct{ *pulumi.OutputState } + +func (CertificateMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Certificate)(nil)).Elem() +} + +func (o CertificateMapOutput) ToCertificateMapOutput() CertificateMapOutput { + return o +} + +func (o CertificateMapOutput) ToCertificateMapOutputWithContext(ctx context.Context) CertificateMapOutput { + return o +} + +func (o CertificateMapOutput) MapIndex(k pulumi.StringInput) CertificateOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Certificate { + return vs[0].(map[string]*Certificate)[vs[1].(string)] + }).(CertificateOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*CertificateInput)(nil)).Elem(), &Certificate{}) + pulumi.RegisterInputType(reflect.TypeOf((*CertificateArrayInput)(nil)).Elem(), CertificateArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*CertificateMapInput)(nil)).Elem(), CertificateMap{}) + pulumi.RegisterOutputType(CertificateOutput{}) + pulumi.RegisterOutputType(CertificateArrayOutput{}) + pulumi.RegisterOutputType(CertificateMapOutput{}) +} diff --git a/sdk/go/dokploy/compose.go b/sdk/go/dokploy/compose.go new file mode 100644 index 0000000..66bc0b7 --- /dev/null +++ b/sdk/go/dokploy/compose.go @@ -0,0 +1,855 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Compose struct { + pulumi.CustomResourceState + + // Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + AppName pulumi.StringOutput `pulumi:"appName"` + // Deploy automatically when the configured trigger fires. + AutoDeploy pulumi.BoolOutput `pulumi:"autoDeploy"` + // Bitbucket branch to deploy. + BitbucketBranch pulumi.StringPtrOutput `pulumi:"bitbucketBranch"` + // ID of the configured Bitbucket provider connection. + BitbucketId pulumi.StringPtrOutput `pulumi:"bitbucketId"` + // Bitbucket repository owner. + BitbucketOwner pulumi.StringPtrOutput `pulumi:"bitbucketOwner"` + // Bitbucket repository name. + BitbucketRepository pulumi.StringPtrOutput `pulumi:"bitbucketRepository"` + // Bitbucket repository slug. + BitbucketRepositorySlug pulumi.StringPtrOutput `pulumi:"bitbucketRepositorySlug"` + // GitHub branch to deploy. + Branch pulumi.StringPtrOutput `pulumi:"branch"` + // Custom `docker compose` command to run. + Command pulumi.StringOutput `pulumi:"command"` + // Inline Compose file contents. Used when `sourceType` is `raw`. + ComposeFile pulumi.StringOutput `pulumi:"composeFile"` + // Path to the Compose file within the repository. + ComposePath pulumi.StringOutput `pulumi:"composePath"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ComposeStatus pulumi.StringOutput `pulumi:"composeStatus"` + // Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + ComposeType pulumi.StringOutput `pulumi:"composeType"` + // RFC 3339 timestamp of when the stack was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Branch to deploy for a custom Git remote. + CustomGitBranch pulumi.StringPtrOutput `pulumi:"customGitBranch"` + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId pulumi.StringPtrOutput `pulumi:"customGitSshKeyId"` + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl pulumi.StringPtrOutput `pulumi:"customGitUrl"` + // Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + DeleteVolumes pulumi.BoolPtrOutput `pulumi:"deleteVolumes"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Clone Git submodules when checking out the repository. + EnableSubmodules pulumi.BoolOutput `pulumi:"enableSubmodules"` + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this stack belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Gitea branch to deploy. + GiteaBranch pulumi.StringPtrOutput `pulumi:"giteaBranch"` + // ID of the configured Gitea provider connection. + GiteaId pulumi.StringPtrOutput `pulumi:"giteaId"` + // Gitea repository owner. + GiteaOwner pulumi.StringPtrOutput `pulumi:"giteaOwner"` + // Gitea repository name. + GiteaRepository pulumi.StringPtrOutput `pulumi:"giteaRepository"` + // ID of the configured GitHub provider connection. + GithubId pulumi.StringPtrOutput `pulumi:"githubId"` + // GitLab branch to deploy. + GitlabBranch pulumi.StringPtrOutput `pulumi:"gitlabBranch"` + // ID of the configured GitLab provider connection. + GitlabId pulumi.StringPtrOutput `pulumi:"gitlabId"` + // GitLab repository owner. + GitlabOwner pulumi.StringPtrOutput `pulumi:"gitlabOwner"` + // Full GitLab namespace path. + GitlabPathNamespace pulumi.StringPtrOutput `pulumi:"gitlabPathNamespace"` + // Numeric GitLab project ID. + GitlabProjectId pulumi.IntPtrOutput `pulumi:"gitlabProjectId"` + // GitLab repository name. + GitlabRepository pulumi.StringPtrOutput `pulumi:"gitlabRepository"` + // Run the stack on its own isolated Docker network. + IsolatedDeployment pulumi.BoolOutput `pulumi:"isolatedDeployment"` + // Prefix volume names for isolated deployments. Retained for backwards compatibility. + IsolatedDeploymentsVolume pulumi.BoolOutput `pulumi:"isolatedDeploymentsVolume"` + // Display name of the stack. + Name pulumi.StringOutput `pulumi:"name"` + // GitHub repository owner. + Owner pulumi.StringPtrOutput `pulumi:"owner"` + // Append a random suffix to service and volume names. + Randomize pulumi.BoolOutput `pulumi:"randomize"` + // GitHub repository name. + Repository pulumi.StringPtrOutput `pulumi:"repository"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + SourceType pulumi.StringOutput `pulumi:"sourceType"` + // Suffix appended to generated resource names. + Suffix pulumi.StringOutput `pulumi:"suffix"` + // What triggers an automatic deployment. Valid values: `push`, `tag`. + TriggerType pulumi.StringOutput `pulumi:"triggerType"` + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths pulumi.StringArrayOutput `pulumi:"watchPaths"` +} + +// NewCompose registers a new resource with the given unique name, arguments, and options. +func NewCompose(ctx *pulumi.Context, + name string, args *ComposeArgs, opts ...pulumi.ResourceOption) (*Compose, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Compose + err := ctx.RegisterResource("dokploy:index/compose:Compose", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetCompose gets an existing Compose resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetCompose(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ComposeState, opts ...pulumi.ResourceOption) (*Compose, error) { + var resource Compose + err := ctx.ReadResource("dokploy:index/compose:Compose", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Compose resources. +type composeState struct { + // Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + AppName *string `pulumi:"appName"` + // Deploy automatically when the configured trigger fires. + AutoDeploy *bool `pulumi:"autoDeploy"` + // Bitbucket branch to deploy. + BitbucketBranch *string `pulumi:"bitbucketBranch"` + // ID of the configured Bitbucket provider connection. + BitbucketId *string `pulumi:"bitbucketId"` + // Bitbucket repository owner. + BitbucketOwner *string `pulumi:"bitbucketOwner"` + // Bitbucket repository name. + BitbucketRepository *string `pulumi:"bitbucketRepository"` + // Bitbucket repository slug. + BitbucketRepositorySlug *string `pulumi:"bitbucketRepositorySlug"` + // GitHub branch to deploy. + Branch *string `pulumi:"branch"` + // Custom `docker compose` command to run. + Command *string `pulumi:"command"` + // Inline Compose file contents. Used when `sourceType` is `raw`. + ComposeFile *string `pulumi:"composeFile"` + // Path to the Compose file within the repository. + ComposePath *string `pulumi:"composePath"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ComposeStatus *string `pulumi:"composeStatus"` + // Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + ComposeType *string `pulumi:"composeType"` + // RFC 3339 timestamp of when the stack was created. + CreatedAt *string `pulumi:"createdAt"` + // Branch to deploy for a custom Git remote. + CustomGitBranch *string `pulumi:"customGitBranch"` + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId *string `pulumi:"customGitSshKeyId"` + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl *string `pulumi:"customGitUrl"` + // Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + DeleteVolumes *bool `pulumi:"deleteVolumes"` + // Free-form description. + Description *string `pulumi:"description"` + // Clone Git submodules when checking out the repository. + EnableSubmodules *bool `pulumi:"enableSubmodules"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this stack belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Gitea branch to deploy. + GiteaBranch *string `pulumi:"giteaBranch"` + // ID of the configured Gitea provider connection. + GiteaId *string `pulumi:"giteaId"` + // Gitea repository owner. + GiteaOwner *string `pulumi:"giteaOwner"` + // Gitea repository name. + GiteaRepository *string `pulumi:"giteaRepository"` + // ID of the configured GitHub provider connection. + GithubId *string `pulumi:"githubId"` + // GitLab branch to deploy. + GitlabBranch *string `pulumi:"gitlabBranch"` + // ID of the configured GitLab provider connection. + GitlabId *string `pulumi:"gitlabId"` + // GitLab repository owner. + GitlabOwner *string `pulumi:"gitlabOwner"` + // Full GitLab namespace path. + GitlabPathNamespace *string `pulumi:"gitlabPathNamespace"` + // Numeric GitLab project ID. + GitlabProjectId *int `pulumi:"gitlabProjectId"` + // GitLab repository name. + GitlabRepository *string `pulumi:"gitlabRepository"` + // Run the stack on its own isolated Docker network. + IsolatedDeployment *bool `pulumi:"isolatedDeployment"` + // Prefix volume names for isolated deployments. Retained for backwards compatibility. + IsolatedDeploymentsVolume *bool `pulumi:"isolatedDeploymentsVolume"` + // Display name of the stack. + Name *string `pulumi:"name"` + // GitHub repository owner. + Owner *string `pulumi:"owner"` + // Append a random suffix to service and volume names. + Randomize *bool `pulumi:"randomize"` + // GitHub repository name. + Repository *string `pulumi:"repository"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + SourceType *string `pulumi:"sourceType"` + // Suffix appended to generated resource names. + Suffix *string `pulumi:"suffix"` + // What triggers an automatic deployment. Valid values: `push`, `tag`. + TriggerType *string `pulumi:"triggerType"` + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths []string `pulumi:"watchPaths"` +} + +type ComposeState struct { + // Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + AppName pulumi.StringPtrInput + // Deploy automatically when the configured trigger fires. + AutoDeploy pulumi.BoolPtrInput + // Bitbucket branch to deploy. + BitbucketBranch pulumi.StringPtrInput + // ID of the configured Bitbucket provider connection. + BitbucketId pulumi.StringPtrInput + // Bitbucket repository owner. + BitbucketOwner pulumi.StringPtrInput + // Bitbucket repository name. + BitbucketRepository pulumi.StringPtrInput + // Bitbucket repository slug. + BitbucketRepositorySlug pulumi.StringPtrInput + // GitHub branch to deploy. + Branch pulumi.StringPtrInput + // Custom `docker compose` command to run. + Command pulumi.StringPtrInput + // Inline Compose file contents. Used when `sourceType` is `raw`. + ComposeFile pulumi.StringPtrInput + // Path to the Compose file within the repository. + ComposePath pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ComposeStatus pulumi.StringPtrInput + // Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + ComposeType pulumi.StringPtrInput + // RFC 3339 timestamp of when the stack was created. + CreatedAt pulumi.StringPtrInput + // Branch to deploy for a custom Git remote. + CustomGitBranch pulumi.StringPtrInput + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId pulumi.StringPtrInput + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl pulumi.StringPtrInput + // Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + DeleteVolumes pulumi.BoolPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Clone Git submodules when checking out the repository. + EnableSubmodules pulumi.BoolPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this stack belongs to. + EnvironmentId pulumi.StringPtrInput + // Gitea branch to deploy. + GiteaBranch pulumi.StringPtrInput + // ID of the configured Gitea provider connection. + GiteaId pulumi.StringPtrInput + // Gitea repository owner. + GiteaOwner pulumi.StringPtrInput + // Gitea repository name. + GiteaRepository pulumi.StringPtrInput + // ID of the configured GitHub provider connection. + GithubId pulumi.StringPtrInput + // GitLab branch to deploy. + GitlabBranch pulumi.StringPtrInput + // ID of the configured GitLab provider connection. + GitlabId pulumi.StringPtrInput + // GitLab repository owner. + GitlabOwner pulumi.StringPtrInput + // Full GitLab namespace path. + GitlabPathNamespace pulumi.StringPtrInput + // Numeric GitLab project ID. + GitlabProjectId pulumi.IntPtrInput + // GitLab repository name. + GitlabRepository pulumi.StringPtrInput + // Run the stack on its own isolated Docker network. + IsolatedDeployment pulumi.BoolPtrInput + // Prefix volume names for isolated deployments. Retained for backwards compatibility. + IsolatedDeploymentsVolume pulumi.BoolPtrInput + // Display name of the stack. + Name pulumi.StringPtrInput + // GitHub repository owner. + Owner pulumi.StringPtrInput + // Append a random suffix to service and volume names. + Randomize pulumi.BoolPtrInput + // GitHub repository name. + Repository pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + SourceType pulumi.StringPtrInput + // Suffix appended to generated resource names. + Suffix pulumi.StringPtrInput + // What triggers an automatic deployment. Valid values: `push`, `tag`. + TriggerType pulumi.StringPtrInput + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths pulumi.StringArrayInput +} + +func (ComposeState) ElementType() reflect.Type { + return reflect.TypeOf((*composeState)(nil)).Elem() +} + +type composeArgs struct { + // Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + AppName *string `pulumi:"appName"` + // Deploy automatically when the configured trigger fires. + AutoDeploy *bool `pulumi:"autoDeploy"` + // Bitbucket branch to deploy. + BitbucketBranch *string `pulumi:"bitbucketBranch"` + // ID of the configured Bitbucket provider connection. + BitbucketId *string `pulumi:"bitbucketId"` + // Bitbucket repository owner. + BitbucketOwner *string `pulumi:"bitbucketOwner"` + // Bitbucket repository name. + BitbucketRepository *string `pulumi:"bitbucketRepository"` + // Bitbucket repository slug. + BitbucketRepositorySlug *string `pulumi:"bitbucketRepositorySlug"` + // GitHub branch to deploy. + Branch *string `pulumi:"branch"` + // Custom `docker compose` command to run. + Command *string `pulumi:"command"` + // Inline Compose file contents. Used when `sourceType` is `raw`. + ComposeFile *string `pulumi:"composeFile"` + // Path to the Compose file within the repository. + ComposePath *string `pulumi:"composePath"` + // Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + ComposeType *string `pulumi:"composeType"` + // Branch to deploy for a custom Git remote. + CustomGitBranch *string `pulumi:"customGitBranch"` + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId *string `pulumi:"customGitSshKeyId"` + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl *string `pulumi:"customGitUrl"` + // Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + DeleteVolumes *bool `pulumi:"deleteVolumes"` + // Free-form description. + Description *string `pulumi:"description"` + // Clone Git submodules when checking out the repository. + EnableSubmodules *bool `pulumi:"enableSubmodules"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this stack belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Gitea branch to deploy. + GiteaBranch *string `pulumi:"giteaBranch"` + // ID of the configured Gitea provider connection. + GiteaId *string `pulumi:"giteaId"` + // Gitea repository owner. + GiteaOwner *string `pulumi:"giteaOwner"` + // Gitea repository name. + GiteaRepository *string `pulumi:"giteaRepository"` + // ID of the configured GitHub provider connection. + GithubId *string `pulumi:"githubId"` + // GitLab branch to deploy. + GitlabBranch *string `pulumi:"gitlabBranch"` + // ID of the configured GitLab provider connection. + GitlabId *string `pulumi:"gitlabId"` + // GitLab repository owner. + GitlabOwner *string `pulumi:"gitlabOwner"` + // Full GitLab namespace path. + GitlabPathNamespace *string `pulumi:"gitlabPathNamespace"` + // Numeric GitLab project ID. + GitlabProjectId *int `pulumi:"gitlabProjectId"` + // GitLab repository name. + GitlabRepository *string `pulumi:"gitlabRepository"` + // Run the stack on its own isolated Docker network. + IsolatedDeployment *bool `pulumi:"isolatedDeployment"` + // Prefix volume names for isolated deployments. Retained for backwards compatibility. + IsolatedDeploymentsVolume *bool `pulumi:"isolatedDeploymentsVolume"` + // Display name of the stack. + Name *string `pulumi:"name"` + // GitHub repository owner. + Owner *string `pulumi:"owner"` + // Append a random suffix to service and volume names. + Randomize *bool `pulumi:"randomize"` + // GitHub repository name. + Repository *string `pulumi:"repository"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + SourceType *string `pulumi:"sourceType"` + // Suffix appended to generated resource names. + Suffix *string `pulumi:"suffix"` + // What triggers an automatic deployment. Valid values: `push`, `tag`. + TriggerType *string `pulumi:"triggerType"` + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths []string `pulumi:"watchPaths"` +} + +// The set of arguments for constructing a Compose resource. +type ComposeArgs struct { + // Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + AppName pulumi.StringPtrInput + // Deploy automatically when the configured trigger fires. + AutoDeploy pulumi.BoolPtrInput + // Bitbucket branch to deploy. + BitbucketBranch pulumi.StringPtrInput + // ID of the configured Bitbucket provider connection. + BitbucketId pulumi.StringPtrInput + // Bitbucket repository owner. + BitbucketOwner pulumi.StringPtrInput + // Bitbucket repository name. + BitbucketRepository pulumi.StringPtrInput + // Bitbucket repository slug. + BitbucketRepositorySlug pulumi.StringPtrInput + // GitHub branch to deploy. + Branch pulumi.StringPtrInput + // Custom `docker compose` command to run. + Command pulumi.StringPtrInput + // Inline Compose file contents. Used when `sourceType` is `raw`. + ComposeFile pulumi.StringPtrInput + // Path to the Compose file within the repository. + ComposePath pulumi.StringPtrInput + // Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + ComposeType pulumi.StringPtrInput + // Branch to deploy for a custom Git remote. + CustomGitBranch pulumi.StringPtrInput + // SSH key used to clone a private custom Git remote. + CustomGitSshKeyId pulumi.StringPtrInput + // Git remote URL, when `sourceType` is `git`. + CustomGitUrl pulumi.StringPtrInput + // Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + DeleteVolumes pulumi.BoolPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Clone Git submodules when checking out the repository. + EnableSubmodules pulumi.BoolPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this stack belongs to. + EnvironmentId pulumi.StringInput + // Gitea branch to deploy. + GiteaBranch pulumi.StringPtrInput + // ID of the configured Gitea provider connection. + GiteaId pulumi.StringPtrInput + // Gitea repository owner. + GiteaOwner pulumi.StringPtrInput + // Gitea repository name. + GiteaRepository pulumi.StringPtrInput + // ID of the configured GitHub provider connection. + GithubId pulumi.StringPtrInput + // GitLab branch to deploy. + GitlabBranch pulumi.StringPtrInput + // ID of the configured GitLab provider connection. + GitlabId pulumi.StringPtrInput + // GitLab repository owner. + GitlabOwner pulumi.StringPtrInput + // Full GitLab namespace path. + GitlabPathNamespace pulumi.StringPtrInput + // Numeric GitLab project ID. + GitlabProjectId pulumi.IntPtrInput + // GitLab repository name. + GitlabRepository pulumi.StringPtrInput + // Run the stack on its own isolated Docker network. + IsolatedDeployment pulumi.BoolPtrInput + // Prefix volume names for isolated deployments. Retained for backwards compatibility. + IsolatedDeploymentsVolume pulumi.BoolPtrInput + // Display name of the stack. + Name pulumi.StringPtrInput + // GitHub repository owner. + Owner pulumi.StringPtrInput + // Append a random suffix to service and volume names. + Randomize pulumi.BoolPtrInput + // GitHub repository name. + Repository pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + SourceType pulumi.StringPtrInput + // Suffix appended to generated resource names. + Suffix pulumi.StringPtrInput + // What triggers an automatic deployment. Valid values: `push`, `tag`. + TriggerType pulumi.StringPtrInput + // Glob patterns that limit which changed paths trigger an automatic deployment. + WatchPaths pulumi.StringArrayInput +} + +func (ComposeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*composeArgs)(nil)).Elem() +} + +type ComposeInput interface { + pulumi.Input + + ToComposeOutput() ComposeOutput + ToComposeOutputWithContext(ctx context.Context) ComposeOutput +} + +func (*Compose) ElementType() reflect.Type { + return reflect.TypeOf((**Compose)(nil)).Elem() +} + +func (i *Compose) ToComposeOutput() ComposeOutput { + return i.ToComposeOutputWithContext(context.Background()) +} + +func (i *Compose) ToComposeOutputWithContext(ctx context.Context) ComposeOutput { + return pulumi.ToOutputWithContext(ctx, i).(ComposeOutput) +} + +// ComposeArrayInput is an input type that accepts ComposeArray and ComposeArrayOutput values. +// You can construct a concrete instance of `ComposeArrayInput` via: +// +// ComposeArray{ ComposeArgs{...} } +type ComposeArrayInput interface { + pulumi.Input + + ToComposeArrayOutput() ComposeArrayOutput + ToComposeArrayOutputWithContext(context.Context) ComposeArrayOutput +} + +type ComposeArray []ComposeInput + +func (ComposeArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Compose)(nil)).Elem() +} + +func (i ComposeArray) ToComposeArrayOutput() ComposeArrayOutput { + return i.ToComposeArrayOutputWithContext(context.Background()) +} + +func (i ComposeArray) ToComposeArrayOutputWithContext(ctx context.Context) ComposeArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ComposeArrayOutput) +} + +// ComposeMapInput is an input type that accepts ComposeMap and ComposeMapOutput values. +// You can construct a concrete instance of `ComposeMapInput` via: +// +// ComposeMap{ "key": ComposeArgs{...} } +type ComposeMapInput interface { + pulumi.Input + + ToComposeMapOutput() ComposeMapOutput + ToComposeMapOutputWithContext(context.Context) ComposeMapOutput +} + +type ComposeMap map[string]ComposeInput + +func (ComposeMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Compose)(nil)).Elem() +} + +func (i ComposeMap) ToComposeMapOutput() ComposeMapOutput { + return i.ToComposeMapOutputWithContext(context.Background()) +} + +func (i ComposeMap) ToComposeMapOutputWithContext(ctx context.Context) ComposeMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ComposeMapOutput) +} + +type ComposeOutput struct{ *pulumi.OutputState } + +func (ComposeOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Compose)(nil)).Elem() +} + +func (o ComposeOutput) ToComposeOutput() ComposeOutput { + return o +} + +func (o ComposeOutput) ToComposeOutputWithContext(ctx context.Context) ComposeOutput { + return o +} + +// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. +func (o ComposeOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Deploy automatically when the configured trigger fires. +func (o ComposeOutput) AutoDeploy() pulumi.BoolOutput { + return o.ApplyT(func(v *Compose) pulumi.BoolOutput { return v.AutoDeploy }).(pulumi.BoolOutput) +} + +// Bitbucket branch to deploy. +func (o ComposeOutput) BitbucketBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.BitbucketBranch }).(pulumi.StringPtrOutput) +} + +// ID of the configured Bitbucket provider connection. +func (o ComposeOutput) BitbucketId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.BitbucketId }).(pulumi.StringPtrOutput) +} + +// Bitbucket repository owner. +func (o ComposeOutput) BitbucketOwner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.BitbucketOwner }).(pulumi.StringPtrOutput) +} + +// Bitbucket repository name. +func (o ComposeOutput) BitbucketRepository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.BitbucketRepository }).(pulumi.StringPtrOutput) +} + +// Bitbucket repository slug. +func (o ComposeOutput) BitbucketRepositorySlug() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.BitbucketRepositorySlug }).(pulumi.StringPtrOutput) +} + +// GitHub branch to deploy. +func (o ComposeOutput) Branch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.Branch }).(pulumi.StringPtrOutput) +} + +// Custom `docker compose` command to run. +func (o ComposeOutput) Command() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.Command }).(pulumi.StringOutput) +} + +// Inline Compose file contents. Used when `sourceType` is `raw`. +func (o ComposeOutput) ComposeFile() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.ComposeFile }).(pulumi.StringOutput) +} + +// Path to the Compose file within the repository. +func (o ComposeOutput) ComposePath() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.ComposePath }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o ComposeOutput) ComposeStatus() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.ComposeStatus }).(pulumi.StringOutput) +} + +// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. +func (o ComposeOutput) ComposeType() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.ComposeType }).(pulumi.StringOutput) +} + +// RFC 3339 timestamp of when the stack was created. +func (o ComposeOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Branch to deploy for a custom Git remote. +func (o ComposeOutput) CustomGitBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.CustomGitBranch }).(pulumi.StringPtrOutput) +} + +// SSH key used to clone a private custom Git remote. +func (o ComposeOutput) CustomGitSshKeyId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.CustomGitSshKeyId }).(pulumi.StringPtrOutput) +} + +// Git remote URL, when `sourceType` is `git`. +func (o ComposeOutput) CustomGitUrl() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.CustomGitUrl }).(pulumi.StringPtrOutput) +} + +// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. +func (o ComposeOutput) DeleteVolumes() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.BoolPtrOutput { return v.DeleteVolumes }).(pulumi.BoolPtrOutput) +} + +// Free-form description. +func (o ComposeOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Clone Git submodules when checking out the repository. +func (o ComposeOutput) EnableSubmodules() pulumi.BoolOutput { + return o.ApplyT(func(v *Compose) pulumi.BoolOutput { return v.EnableSubmodules }).(pulumi.BoolOutput) +} + +// Environment variables in `KEY=value` format, one per line. +func (o ComposeOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this stack belongs to. +func (o ComposeOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Gitea branch to deploy. +func (o ComposeOutput) GiteaBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GiteaBranch }).(pulumi.StringPtrOutput) +} + +// ID of the configured Gitea provider connection. +func (o ComposeOutput) GiteaId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GiteaId }).(pulumi.StringPtrOutput) +} + +// Gitea repository owner. +func (o ComposeOutput) GiteaOwner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GiteaOwner }).(pulumi.StringPtrOutput) +} + +// Gitea repository name. +func (o ComposeOutput) GiteaRepository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GiteaRepository }).(pulumi.StringPtrOutput) +} + +// ID of the configured GitHub provider connection. +func (o ComposeOutput) GithubId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GithubId }).(pulumi.StringPtrOutput) +} + +// GitLab branch to deploy. +func (o ComposeOutput) GitlabBranch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GitlabBranch }).(pulumi.StringPtrOutput) +} + +// ID of the configured GitLab provider connection. +func (o ComposeOutput) GitlabId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GitlabId }).(pulumi.StringPtrOutput) +} + +// GitLab repository owner. +func (o ComposeOutput) GitlabOwner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GitlabOwner }).(pulumi.StringPtrOutput) +} + +// Full GitLab namespace path. +func (o ComposeOutput) GitlabPathNamespace() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GitlabPathNamespace }).(pulumi.StringPtrOutput) +} + +// Numeric GitLab project ID. +func (o ComposeOutput) GitlabProjectId() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.IntPtrOutput { return v.GitlabProjectId }).(pulumi.IntPtrOutput) +} + +// GitLab repository name. +func (o ComposeOutput) GitlabRepository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.GitlabRepository }).(pulumi.StringPtrOutput) +} + +// Run the stack on its own isolated Docker network. +func (o ComposeOutput) IsolatedDeployment() pulumi.BoolOutput { + return o.ApplyT(func(v *Compose) pulumi.BoolOutput { return v.IsolatedDeployment }).(pulumi.BoolOutput) +} + +// Prefix volume names for isolated deployments. Retained for backwards compatibility. +func (o ComposeOutput) IsolatedDeploymentsVolume() pulumi.BoolOutput { + return o.ApplyT(func(v *Compose) pulumi.BoolOutput { return v.IsolatedDeploymentsVolume }).(pulumi.BoolOutput) +} + +// Display name of the stack. +func (o ComposeOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// GitHub repository owner. +func (o ComposeOutput) Owner() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.Owner }).(pulumi.StringPtrOutput) +} + +// Append a random suffix to service and volume names. +func (o ComposeOutput) Randomize() pulumi.BoolOutput { + return o.ApplyT(func(v *Compose) pulumi.BoolOutput { return v.Randomize }).(pulumi.BoolOutput) +} + +// GitHub repository name. +func (o ComposeOutput) Repository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.Repository }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o ComposeOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Compose) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. +func (o ComposeOutput) SourceType() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.SourceType }).(pulumi.StringOutput) +} + +// Suffix appended to generated resource names. +func (o ComposeOutput) Suffix() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.Suffix }).(pulumi.StringOutput) +} + +// What triggers an automatic deployment. Valid values: `push`, `tag`. +func (o ComposeOutput) TriggerType() pulumi.StringOutput { + return o.ApplyT(func(v *Compose) pulumi.StringOutput { return v.TriggerType }).(pulumi.StringOutput) +} + +// Glob patterns that limit which changed paths trigger an automatic deployment. +func (o ComposeOutput) WatchPaths() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Compose) pulumi.StringArrayOutput { return v.WatchPaths }).(pulumi.StringArrayOutput) +} + +type ComposeArrayOutput struct{ *pulumi.OutputState } + +func (ComposeArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Compose)(nil)).Elem() +} + +func (o ComposeArrayOutput) ToComposeArrayOutput() ComposeArrayOutput { + return o +} + +func (o ComposeArrayOutput) ToComposeArrayOutputWithContext(ctx context.Context) ComposeArrayOutput { + return o +} + +func (o ComposeArrayOutput) Index(i pulumi.IntInput) ComposeOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Compose { + return vs[0].([]*Compose)[vs[1].(int)] + }).(ComposeOutput) +} + +type ComposeMapOutput struct{ *pulumi.OutputState } + +func (ComposeMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Compose)(nil)).Elem() +} + +func (o ComposeMapOutput) ToComposeMapOutput() ComposeMapOutput { + return o +} + +func (o ComposeMapOutput) ToComposeMapOutputWithContext(ctx context.Context) ComposeMapOutput { + return o +} + +func (o ComposeMapOutput) MapIndex(k pulumi.StringInput) ComposeOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Compose { + return vs[0].(map[string]*Compose)[vs[1].(string)] + }).(ComposeOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ComposeInput)(nil)).Elem(), &Compose{}) + pulumi.RegisterInputType(reflect.TypeOf((*ComposeArrayInput)(nil)).Elem(), ComposeArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ComposeMapInput)(nil)).Elem(), ComposeMap{}) + pulumi.RegisterOutputType(ComposeOutput{}) + pulumi.RegisterOutputType(ComposeArrayOutput{}) + pulumi.RegisterOutputType(ComposeMapOutput{}) +} diff --git a/sdk/go/dokploy/config/config.go b/sdk/go/dokploy/config/config.go new file mode 100644 index 0000000..b69879e --- /dev/null +++ b/sdk/go/dokploy/config/config.go @@ -0,0 +1,56 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package config + +import ( + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config" +) + +var _ = internal.GetEnvOrDefault + +// API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. +func GetApiKey(ctx *pulumi.Context) string { + v, err := config.Try(ctx, "dokploy:apiKey") + if err == nil { + return v + } + var value string + if d := internal.GetEnvOrDefault(nil, nil, "DOKPLOY_API_KEY"); d != nil { + value = d.(string) + } + return value +} + +// Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. +func GetHost(ctx *pulumi.Context) string { + v, err := config.Try(ctx, "dokploy:host") + if err == nil { + return v + } + var value string + if d := internal.GetEnvOrDefault(nil, nil, "DOKPLOY_HOST"); d != nil { + value = d.(string) + } + return value +} + +// Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. +func GetInsecureSkipVerify(ctx *pulumi.Context) bool { + return config.GetBool(ctx, "dokploy:insecureSkipVerify") +} + +// Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. +func GetTimeoutSeconds(ctx *pulumi.Context) int { + v, err := config.TryInt(ctx, "dokploy:timeoutSeconds") + if err == nil { + return v + } + var value int + if d := internal.GetEnvOrDefault(nil, internal.ParseEnvInt, "DOKPLOY_TIMEOUT_SECONDS"); d != nil { + value = d.(int) + } + return value +} diff --git a/sdk/go/dokploy/destination.go b/sdk/go/dokploy/destination.go new file mode 100644 index 0000000..dbed553 --- /dev/null +++ b/sdk/go/dokploy/destination.go @@ -0,0 +1,368 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Destination struct { + pulumi.CustomResourceState + + // S3 access key ID. + AccessKey pulumi.StringOutput `pulumi:"accessKey"` + // Extra flags passed to the underlying `rclone` invocation. + AdditionalFlags pulumi.StringArrayOutput `pulumi:"additionalFlags"` + // Bucket name. + Bucket pulumi.StringOutput `pulumi:"bucket"` + // Timestamp of when the destination was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // S3 endpoint URL. + Endpoint pulumi.StringOutput `pulumi:"endpoint"` + // Display name of the destination. + Name pulumi.StringOutput `pulumi:"name"` + // Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + ProviderName pulumi.StringPtrOutput `pulumi:"providerName"` + // Bucket region, for example `us-east-1`. + Region pulumi.StringOutput `pulumi:"region"` + // S3 secret access key. + SecretAccessKey pulumi.StringOutput `pulumi:"secretAccessKey"` + // Server this destination is scoped to. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` +} + +// NewDestination registers a new resource with the given unique name, arguments, and options. +func NewDestination(ctx *pulumi.Context, + name string, args *DestinationArgs, opts ...pulumi.ResourceOption) (*Destination, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.AccessKey == nil { + return nil, errors.New("invalid value for required argument 'AccessKey'") + } + if args.Bucket == nil { + return nil, errors.New("invalid value for required argument 'Bucket'") + } + if args.Endpoint == nil { + return nil, errors.New("invalid value for required argument 'Endpoint'") + } + if args.Region == nil { + return nil, errors.New("invalid value for required argument 'Region'") + } + if args.SecretAccessKey == nil { + return nil, errors.New("invalid value for required argument 'SecretAccessKey'") + } + if args.SecretAccessKey != nil { + args.SecretAccessKey = pulumi.ToSecret(args.SecretAccessKey).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "secretAccessKey", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Destination + err := ctx.RegisterResource("dokploy:index/destination:Destination", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetDestination gets an existing Destination resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetDestination(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *DestinationState, opts ...pulumi.ResourceOption) (*Destination, error) { + var resource Destination + err := ctx.ReadResource("dokploy:index/destination:Destination", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Destination resources. +type destinationState struct { + // S3 access key ID. + AccessKey *string `pulumi:"accessKey"` + // Extra flags passed to the underlying `rclone` invocation. + AdditionalFlags []string `pulumi:"additionalFlags"` + // Bucket name. + Bucket *string `pulumi:"bucket"` + // Timestamp of when the destination was created. + CreatedAt *string `pulumi:"createdAt"` + // S3 endpoint URL. + Endpoint *string `pulumi:"endpoint"` + // Display name of the destination. + Name *string `pulumi:"name"` + // Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + ProviderName *string `pulumi:"providerName"` + // Bucket region, for example `us-east-1`. + Region *string `pulumi:"region"` + // S3 secret access key. + SecretAccessKey *string `pulumi:"secretAccessKey"` + // Server this destination is scoped to. + ServerId *string `pulumi:"serverId"` +} + +type DestinationState struct { + // S3 access key ID. + AccessKey pulumi.StringPtrInput + // Extra flags passed to the underlying `rclone` invocation. + AdditionalFlags pulumi.StringArrayInput + // Bucket name. + Bucket pulumi.StringPtrInput + // Timestamp of when the destination was created. + CreatedAt pulumi.StringPtrInput + // S3 endpoint URL. + Endpoint pulumi.StringPtrInput + // Display name of the destination. + Name pulumi.StringPtrInput + // Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + ProviderName pulumi.StringPtrInput + // Bucket region, for example `us-east-1`. + Region pulumi.StringPtrInput + // S3 secret access key. + SecretAccessKey pulumi.StringPtrInput + // Server this destination is scoped to. + ServerId pulumi.StringPtrInput +} + +func (DestinationState) ElementType() reflect.Type { + return reflect.TypeOf((*destinationState)(nil)).Elem() +} + +type destinationArgs struct { + // S3 access key ID. + AccessKey string `pulumi:"accessKey"` + // Extra flags passed to the underlying `rclone` invocation. + AdditionalFlags []string `pulumi:"additionalFlags"` + // Bucket name. + Bucket string `pulumi:"bucket"` + // S3 endpoint URL. + Endpoint string `pulumi:"endpoint"` + // Display name of the destination. + Name *string `pulumi:"name"` + // Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + ProviderName *string `pulumi:"providerName"` + // Bucket region, for example `us-east-1`. + Region string `pulumi:"region"` + // S3 secret access key. + SecretAccessKey string `pulumi:"secretAccessKey"` + // Server this destination is scoped to. + ServerId *string `pulumi:"serverId"` +} + +// The set of arguments for constructing a Destination resource. +type DestinationArgs struct { + // S3 access key ID. + AccessKey pulumi.StringInput + // Extra flags passed to the underlying `rclone` invocation. + AdditionalFlags pulumi.StringArrayInput + // Bucket name. + Bucket pulumi.StringInput + // S3 endpoint URL. + Endpoint pulumi.StringInput + // Display name of the destination. + Name pulumi.StringPtrInput + // Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + ProviderName pulumi.StringPtrInput + // Bucket region, for example `us-east-1`. + Region pulumi.StringInput + // S3 secret access key. + SecretAccessKey pulumi.StringInput + // Server this destination is scoped to. + ServerId pulumi.StringPtrInput +} + +func (DestinationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*destinationArgs)(nil)).Elem() +} + +type DestinationInput interface { + pulumi.Input + + ToDestinationOutput() DestinationOutput + ToDestinationOutputWithContext(ctx context.Context) DestinationOutput +} + +func (*Destination) ElementType() reflect.Type { + return reflect.TypeOf((**Destination)(nil)).Elem() +} + +func (i *Destination) ToDestinationOutput() DestinationOutput { + return i.ToDestinationOutputWithContext(context.Background()) +} + +func (i *Destination) ToDestinationOutputWithContext(ctx context.Context) DestinationOutput { + return pulumi.ToOutputWithContext(ctx, i).(DestinationOutput) +} + +// DestinationArrayInput is an input type that accepts DestinationArray and DestinationArrayOutput values. +// You can construct a concrete instance of `DestinationArrayInput` via: +// +// DestinationArray{ DestinationArgs{...} } +type DestinationArrayInput interface { + pulumi.Input + + ToDestinationArrayOutput() DestinationArrayOutput + ToDestinationArrayOutputWithContext(context.Context) DestinationArrayOutput +} + +type DestinationArray []DestinationInput + +func (DestinationArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Destination)(nil)).Elem() +} + +func (i DestinationArray) ToDestinationArrayOutput() DestinationArrayOutput { + return i.ToDestinationArrayOutputWithContext(context.Background()) +} + +func (i DestinationArray) ToDestinationArrayOutputWithContext(ctx context.Context) DestinationArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(DestinationArrayOutput) +} + +// DestinationMapInput is an input type that accepts DestinationMap and DestinationMapOutput values. +// You can construct a concrete instance of `DestinationMapInput` via: +// +// DestinationMap{ "key": DestinationArgs{...} } +type DestinationMapInput interface { + pulumi.Input + + ToDestinationMapOutput() DestinationMapOutput + ToDestinationMapOutputWithContext(context.Context) DestinationMapOutput +} + +type DestinationMap map[string]DestinationInput + +func (DestinationMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Destination)(nil)).Elem() +} + +func (i DestinationMap) ToDestinationMapOutput() DestinationMapOutput { + return i.ToDestinationMapOutputWithContext(context.Background()) +} + +func (i DestinationMap) ToDestinationMapOutputWithContext(ctx context.Context) DestinationMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(DestinationMapOutput) +} + +type DestinationOutput struct{ *pulumi.OutputState } + +func (DestinationOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Destination)(nil)).Elem() +} + +func (o DestinationOutput) ToDestinationOutput() DestinationOutput { + return o +} + +func (o DestinationOutput) ToDestinationOutputWithContext(ctx context.Context) DestinationOutput { + return o +} + +// S3 access key ID. +func (o DestinationOutput) AccessKey() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.AccessKey }).(pulumi.StringOutput) +} + +// Extra flags passed to the underlying `rclone` invocation. +func (o DestinationOutput) AdditionalFlags() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Destination) pulumi.StringArrayOutput { return v.AdditionalFlags }).(pulumi.StringArrayOutput) +} + +// Bucket name. +func (o DestinationOutput) Bucket() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.Bucket }).(pulumi.StringOutput) +} + +// Timestamp of when the destination was created. +func (o DestinationOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// S3 endpoint URL. +func (o DestinationOutput) Endpoint() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.Endpoint }).(pulumi.StringOutput) +} + +// Display name of the destination. +func (o DestinationOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. +func (o DestinationOutput) ProviderName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Destination) pulumi.StringPtrOutput { return v.ProviderName }).(pulumi.StringPtrOutput) +} + +// Bucket region, for example `us-east-1`. +func (o DestinationOutput) Region() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) +} + +// S3 secret access key. +func (o DestinationOutput) SecretAccessKey() pulumi.StringOutput { + return o.ApplyT(func(v *Destination) pulumi.StringOutput { return v.SecretAccessKey }).(pulumi.StringOutput) +} + +// Server this destination is scoped to. +func (o DestinationOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Destination) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +type DestinationArrayOutput struct{ *pulumi.OutputState } + +func (DestinationArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Destination)(nil)).Elem() +} + +func (o DestinationArrayOutput) ToDestinationArrayOutput() DestinationArrayOutput { + return o +} + +func (o DestinationArrayOutput) ToDestinationArrayOutputWithContext(ctx context.Context) DestinationArrayOutput { + return o +} + +func (o DestinationArrayOutput) Index(i pulumi.IntInput) DestinationOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Destination { + return vs[0].([]*Destination)[vs[1].(int)] + }).(DestinationOutput) +} + +type DestinationMapOutput struct{ *pulumi.OutputState } + +func (DestinationMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Destination)(nil)).Elem() +} + +func (o DestinationMapOutput) ToDestinationMapOutput() DestinationMapOutput { + return o +} + +func (o DestinationMapOutput) ToDestinationMapOutputWithContext(ctx context.Context) DestinationMapOutput { + return o +} + +func (o DestinationMapOutput) MapIndex(k pulumi.StringInput) DestinationOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Destination { + return vs[0].(map[string]*Destination)[vs[1].(string)] + }).(DestinationOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*DestinationInput)(nil)).Elem(), &Destination{}) + pulumi.RegisterInputType(reflect.TypeOf((*DestinationArrayInput)(nil)).Elem(), DestinationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*DestinationMapInput)(nil)).Elem(), DestinationMap{}) + pulumi.RegisterOutputType(DestinationOutput{}) + pulumi.RegisterOutputType(DestinationArrayOutput{}) + pulumi.RegisterOutputType(DestinationMapOutput{}) +} diff --git a/sdk/go/dokploy/doc.go b/sdk/go/dokploy/doc.go new file mode 100644 index 0000000..f1e31c0 --- /dev/null +++ b/sdk/go/dokploy/doc.go @@ -0,0 +1,2 @@ +// A Pulumi package for creating and managing Dokploy resources +package dokploy diff --git a/sdk/go/dokploy/domain.go b/sdk/go/dokploy/domain.go new file mode 100644 index 0000000..351a6bc --- /dev/null +++ b/sdk/go/dokploy/domain.go @@ -0,0 +1,454 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Domain struct { + pulumi.CustomResourceState + + // Application this domain routes to. + ApplicationId pulumi.StringPtrOutput `pulumi:"applicationId"` + // How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + CertificateType pulumi.StringOutput `pulumi:"certificateType"` + // Compose stack this domain routes to. + ComposeId pulumi.StringPtrOutput `pulumi:"composeId"` + // RFC 3339 timestamp of when the domain was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Traefik certificate resolver name, when `certificateType` is `custom`. + CustomCertResolver pulumi.StringPtrOutput `pulumi:"customCertResolver"` + // Traefik entrypoint to bind, when not using the defaults. + CustomEntrypoint pulumi.StringPtrOutput `pulumi:"customEntrypoint"` + // What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + DomainType pulumi.StringOutput `pulumi:"domainType"` + // Protect this domain with Dokploy's forward auth. + ForwardAuthEnabled pulumi.BoolOutput `pulumi:"forwardAuthEnabled"` + // Fully-qualified hostname, for example `api.example.com`. + Host pulumi.StringOutput `pulumi:"host"` + // Serve the domain over HTTPS and redirect HTTP traffic to it. + Https pulumi.BoolOutput `pulumi:"https"` + // Path the request is rewritten to before it reaches the container, defaults to `/`. + InternalPath pulumi.StringOutput `pulumi:"internalPath"` + // Names of Traefik middlewares to apply. + Middlewares pulumi.StringArrayOutput `pulumi:"middlewares"` + // Path prefix this domain routes, defaults to `/`. + Path pulumi.StringOutput `pulumi:"path"` + // Container port that receives the traffic, defaults to `3000`. + Port pulumi.IntOutput `pulumi:"port"` + // Preview deployment this domain routes to. + PreviewDeploymentId pulumi.StringPtrOutput `pulumi:"previewDeploymentId"` + // Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + ServiceName pulumi.StringPtrOutput `pulumi:"serviceName"` + // Strip `path` from the request before forwarding it. + StripPath pulumi.BoolOutput `pulumi:"stripPath"` +} + +// NewDomain registers a new resource with the given unique name, arguments, and options. +func NewDomain(ctx *pulumi.Context, + name string, args *DomainArgs, opts ...pulumi.ResourceOption) (*Domain, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Host == nil { + return nil, errors.New("invalid value for required argument 'Host'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Domain + err := ctx.RegisterResource("dokploy:index/domain:Domain", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetDomain gets an existing Domain resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetDomain(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *DomainState, opts ...pulumi.ResourceOption) (*Domain, error) { + var resource Domain + err := ctx.ReadResource("dokploy:index/domain:Domain", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Domain resources. +type domainState struct { + // Application this domain routes to. + ApplicationId *string `pulumi:"applicationId"` + // How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + CertificateType *string `pulumi:"certificateType"` + // Compose stack this domain routes to. + ComposeId *string `pulumi:"composeId"` + // RFC 3339 timestamp of when the domain was created. + CreatedAt *string `pulumi:"createdAt"` + // Traefik certificate resolver name, when `certificateType` is `custom`. + CustomCertResolver *string `pulumi:"customCertResolver"` + // Traefik entrypoint to bind, when not using the defaults. + CustomEntrypoint *string `pulumi:"customEntrypoint"` + // What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + DomainType *string `pulumi:"domainType"` + // Protect this domain with Dokploy's forward auth. + ForwardAuthEnabled *bool `pulumi:"forwardAuthEnabled"` + // Fully-qualified hostname, for example `api.example.com`. + Host *string `pulumi:"host"` + // Serve the domain over HTTPS and redirect HTTP traffic to it. + Https *bool `pulumi:"https"` + // Path the request is rewritten to before it reaches the container, defaults to `/`. + InternalPath *string `pulumi:"internalPath"` + // Names of Traefik middlewares to apply. + Middlewares []string `pulumi:"middlewares"` + // Path prefix this domain routes, defaults to `/`. + Path *string `pulumi:"path"` + // Container port that receives the traffic, defaults to `3000`. + Port *int `pulumi:"port"` + // Preview deployment this domain routes to. + PreviewDeploymentId *string `pulumi:"previewDeploymentId"` + // Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + ServiceName *string `pulumi:"serviceName"` + // Strip `path` from the request before forwarding it. + StripPath *bool `pulumi:"stripPath"` +} + +type DomainState struct { + // Application this domain routes to. + ApplicationId pulumi.StringPtrInput + // How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + CertificateType pulumi.StringPtrInput + // Compose stack this domain routes to. + ComposeId pulumi.StringPtrInput + // RFC 3339 timestamp of when the domain was created. + CreatedAt pulumi.StringPtrInput + // Traefik certificate resolver name, when `certificateType` is `custom`. + CustomCertResolver pulumi.StringPtrInput + // Traefik entrypoint to bind, when not using the defaults. + CustomEntrypoint pulumi.StringPtrInput + // What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + DomainType pulumi.StringPtrInput + // Protect this domain with Dokploy's forward auth. + ForwardAuthEnabled pulumi.BoolPtrInput + // Fully-qualified hostname, for example `api.example.com`. + Host pulumi.StringPtrInput + // Serve the domain over HTTPS and redirect HTTP traffic to it. + Https pulumi.BoolPtrInput + // Path the request is rewritten to before it reaches the container, defaults to `/`. + InternalPath pulumi.StringPtrInput + // Names of Traefik middlewares to apply. + Middlewares pulumi.StringArrayInput + // Path prefix this domain routes, defaults to `/`. + Path pulumi.StringPtrInput + // Container port that receives the traffic, defaults to `3000`. + Port pulumi.IntPtrInput + // Preview deployment this domain routes to. + PreviewDeploymentId pulumi.StringPtrInput + // Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + ServiceName pulumi.StringPtrInput + // Strip `path` from the request before forwarding it. + StripPath pulumi.BoolPtrInput +} + +func (DomainState) ElementType() reflect.Type { + return reflect.TypeOf((*domainState)(nil)).Elem() +} + +type domainArgs struct { + // Application this domain routes to. + ApplicationId *string `pulumi:"applicationId"` + // How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + CertificateType *string `pulumi:"certificateType"` + // Compose stack this domain routes to. + ComposeId *string `pulumi:"composeId"` + // Traefik certificate resolver name, when `certificateType` is `custom`. + CustomCertResolver *string `pulumi:"customCertResolver"` + // Traefik entrypoint to bind, when not using the defaults. + CustomEntrypoint *string `pulumi:"customEntrypoint"` + // What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + DomainType *string `pulumi:"domainType"` + // Protect this domain with Dokploy's forward auth. + ForwardAuthEnabled *bool `pulumi:"forwardAuthEnabled"` + // Fully-qualified hostname, for example `api.example.com`. + Host string `pulumi:"host"` + // Serve the domain over HTTPS and redirect HTTP traffic to it. + Https *bool `pulumi:"https"` + // Path the request is rewritten to before it reaches the container, defaults to `/`. + InternalPath *string `pulumi:"internalPath"` + // Names of Traefik middlewares to apply. + Middlewares []string `pulumi:"middlewares"` + // Path prefix this domain routes, defaults to `/`. + Path *string `pulumi:"path"` + // Container port that receives the traffic, defaults to `3000`. + Port *int `pulumi:"port"` + // Preview deployment this domain routes to. + PreviewDeploymentId *string `pulumi:"previewDeploymentId"` + // Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + ServiceName *string `pulumi:"serviceName"` + // Strip `path` from the request before forwarding it. + StripPath *bool `pulumi:"stripPath"` +} + +// The set of arguments for constructing a Domain resource. +type DomainArgs struct { + // Application this domain routes to. + ApplicationId pulumi.StringPtrInput + // How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + CertificateType pulumi.StringPtrInput + // Compose stack this domain routes to. + ComposeId pulumi.StringPtrInput + // Traefik certificate resolver name, when `certificateType` is `custom`. + CustomCertResolver pulumi.StringPtrInput + // Traefik entrypoint to bind, when not using the defaults. + CustomEntrypoint pulumi.StringPtrInput + // What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + DomainType pulumi.StringPtrInput + // Protect this domain with Dokploy's forward auth. + ForwardAuthEnabled pulumi.BoolPtrInput + // Fully-qualified hostname, for example `api.example.com`. + Host pulumi.StringInput + // Serve the domain over HTTPS and redirect HTTP traffic to it. + Https pulumi.BoolPtrInput + // Path the request is rewritten to before it reaches the container, defaults to `/`. + InternalPath pulumi.StringPtrInput + // Names of Traefik middlewares to apply. + Middlewares pulumi.StringArrayInput + // Path prefix this domain routes, defaults to `/`. + Path pulumi.StringPtrInput + // Container port that receives the traffic, defaults to `3000`. + Port pulumi.IntPtrInput + // Preview deployment this domain routes to. + PreviewDeploymentId pulumi.StringPtrInput + // Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + ServiceName pulumi.StringPtrInput + // Strip `path` from the request before forwarding it. + StripPath pulumi.BoolPtrInput +} + +func (DomainArgs) ElementType() reflect.Type { + return reflect.TypeOf((*domainArgs)(nil)).Elem() +} + +type DomainInput interface { + pulumi.Input + + ToDomainOutput() DomainOutput + ToDomainOutputWithContext(ctx context.Context) DomainOutput +} + +func (*Domain) ElementType() reflect.Type { + return reflect.TypeOf((**Domain)(nil)).Elem() +} + +func (i *Domain) ToDomainOutput() DomainOutput { + return i.ToDomainOutputWithContext(context.Background()) +} + +func (i *Domain) ToDomainOutputWithContext(ctx context.Context) DomainOutput { + return pulumi.ToOutputWithContext(ctx, i).(DomainOutput) +} + +// DomainArrayInput is an input type that accepts DomainArray and DomainArrayOutput values. +// You can construct a concrete instance of `DomainArrayInput` via: +// +// DomainArray{ DomainArgs{...} } +type DomainArrayInput interface { + pulumi.Input + + ToDomainArrayOutput() DomainArrayOutput + ToDomainArrayOutputWithContext(context.Context) DomainArrayOutput +} + +type DomainArray []DomainInput + +func (DomainArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Domain)(nil)).Elem() +} + +func (i DomainArray) ToDomainArrayOutput() DomainArrayOutput { + return i.ToDomainArrayOutputWithContext(context.Background()) +} + +func (i DomainArray) ToDomainArrayOutputWithContext(ctx context.Context) DomainArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(DomainArrayOutput) +} + +// DomainMapInput is an input type that accepts DomainMap and DomainMapOutput values. +// You can construct a concrete instance of `DomainMapInput` via: +// +// DomainMap{ "key": DomainArgs{...} } +type DomainMapInput interface { + pulumi.Input + + ToDomainMapOutput() DomainMapOutput + ToDomainMapOutputWithContext(context.Context) DomainMapOutput +} + +type DomainMap map[string]DomainInput + +func (DomainMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Domain)(nil)).Elem() +} + +func (i DomainMap) ToDomainMapOutput() DomainMapOutput { + return i.ToDomainMapOutputWithContext(context.Background()) +} + +func (i DomainMap) ToDomainMapOutputWithContext(ctx context.Context) DomainMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(DomainMapOutput) +} + +type DomainOutput struct{ *pulumi.OutputState } + +func (DomainOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Domain)(nil)).Elem() +} + +func (o DomainOutput) ToDomainOutput() DomainOutput { + return o +} + +func (o DomainOutput) ToDomainOutputWithContext(ctx context.Context) DomainOutput { + return o +} + +// Application this domain routes to. +func (o DomainOutput) ApplicationId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Domain) pulumi.StringPtrOutput { return v.ApplicationId }).(pulumi.StringPtrOutput) +} + +// How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. +func (o DomainOutput) CertificateType() pulumi.StringOutput { + return o.ApplyT(func(v *Domain) pulumi.StringOutput { return v.CertificateType }).(pulumi.StringOutput) +} + +// Compose stack this domain routes to. +func (o DomainOutput) ComposeId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Domain) pulumi.StringPtrOutput { return v.ComposeId }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the domain was created. +func (o DomainOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Domain) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Traefik certificate resolver name, when `certificateType` is `custom`. +func (o DomainOutput) CustomCertResolver() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Domain) pulumi.StringPtrOutput { return v.CustomCertResolver }).(pulumi.StringPtrOutput) +} + +// Traefik entrypoint to bind, when not using the defaults. +func (o DomainOutput) CustomEntrypoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Domain) pulumi.StringPtrOutput { return v.CustomEntrypoint }).(pulumi.StringPtrOutput) +} + +// What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. +func (o DomainOutput) DomainType() pulumi.StringOutput { + return o.ApplyT(func(v *Domain) pulumi.StringOutput { return v.DomainType }).(pulumi.StringOutput) +} + +// Protect this domain with Dokploy's forward auth. +func (o DomainOutput) ForwardAuthEnabled() pulumi.BoolOutput { + return o.ApplyT(func(v *Domain) pulumi.BoolOutput { return v.ForwardAuthEnabled }).(pulumi.BoolOutput) +} + +// Fully-qualified hostname, for example `api.example.com`. +func (o DomainOutput) Host() pulumi.StringOutput { + return o.ApplyT(func(v *Domain) pulumi.StringOutput { return v.Host }).(pulumi.StringOutput) +} + +// Serve the domain over HTTPS and redirect HTTP traffic to it. +func (o DomainOutput) Https() pulumi.BoolOutput { + return o.ApplyT(func(v *Domain) pulumi.BoolOutput { return v.Https }).(pulumi.BoolOutput) +} + +// Path the request is rewritten to before it reaches the container, defaults to `/`. +func (o DomainOutput) InternalPath() pulumi.StringOutput { + return o.ApplyT(func(v *Domain) pulumi.StringOutput { return v.InternalPath }).(pulumi.StringOutput) +} + +// Names of Traefik middlewares to apply. +func (o DomainOutput) Middlewares() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Domain) pulumi.StringArrayOutput { return v.Middlewares }).(pulumi.StringArrayOutput) +} + +// Path prefix this domain routes, defaults to `/`. +func (o DomainOutput) Path() pulumi.StringOutput { + return o.ApplyT(func(v *Domain) pulumi.StringOutput { return v.Path }).(pulumi.StringOutput) +} + +// Container port that receives the traffic, defaults to `3000`. +func (o DomainOutput) Port() pulumi.IntOutput { + return o.ApplyT(func(v *Domain) pulumi.IntOutput { return v.Port }).(pulumi.IntOutput) +} + +// Preview deployment this domain routes to. +func (o DomainOutput) PreviewDeploymentId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Domain) pulumi.StringPtrOutput { return v.PreviewDeploymentId }).(pulumi.StringPtrOutput) +} + +// Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. +func (o DomainOutput) ServiceName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Domain) pulumi.StringPtrOutput { return v.ServiceName }).(pulumi.StringPtrOutput) +} + +// Strip `path` from the request before forwarding it. +func (o DomainOutput) StripPath() pulumi.BoolOutput { + return o.ApplyT(func(v *Domain) pulumi.BoolOutput { return v.StripPath }).(pulumi.BoolOutput) +} + +type DomainArrayOutput struct{ *pulumi.OutputState } + +func (DomainArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Domain)(nil)).Elem() +} + +func (o DomainArrayOutput) ToDomainArrayOutput() DomainArrayOutput { + return o +} + +func (o DomainArrayOutput) ToDomainArrayOutputWithContext(ctx context.Context) DomainArrayOutput { + return o +} + +func (o DomainArrayOutput) Index(i pulumi.IntInput) DomainOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Domain { + return vs[0].([]*Domain)[vs[1].(int)] + }).(DomainOutput) +} + +type DomainMapOutput struct{ *pulumi.OutputState } + +func (DomainMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Domain)(nil)).Elem() +} + +func (o DomainMapOutput) ToDomainMapOutput() DomainMapOutput { + return o +} + +func (o DomainMapOutput) ToDomainMapOutputWithContext(ctx context.Context) DomainMapOutput { + return o +} + +func (o DomainMapOutput) MapIndex(k pulumi.StringInput) DomainOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Domain { + return vs[0].(map[string]*Domain)[vs[1].(string)] + }).(DomainOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*DomainInput)(nil)).Elem(), &Domain{}) + pulumi.RegisterInputType(reflect.TypeOf((*DomainArrayInput)(nil)).Elem(), DomainArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*DomainMapInput)(nil)).Elem(), DomainMap{}) + pulumi.RegisterOutputType(DomainOutput{}) + pulumi.RegisterOutputType(DomainArrayOutput{}) + pulumi.RegisterOutputType(DomainMapOutput{}) +} diff --git a/sdk/go/dokploy/environment.go b/sdk/go/dokploy/environment.go new file mode 100644 index 0000000..c52013a --- /dev/null +++ b/sdk/go/dokploy/environment.go @@ -0,0 +1,285 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Environment struct { + pulumi.CustomResourceState + + // RFC 3339 timestamp of when the environment was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + Env pulumi.StringOutput `pulumi:"env"` + // Whether this is the project's default environment. + IsDefault pulumi.BoolOutput `pulumi:"isDefault"` + // Environment name, for example `staging`. + Name pulumi.StringOutput `pulumi:"name"` + // Project this environment belongs to. + ProjectId pulumi.StringOutput `pulumi:"projectId"` +} + +// NewEnvironment registers a new resource with the given unique name, arguments, and options. +func NewEnvironment(ctx *pulumi.Context, + name string, args *EnvironmentArgs, opts ...pulumi.ResourceOption) (*Environment, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ProjectId == nil { + return nil, errors.New("invalid value for required argument 'ProjectId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Environment + err := ctx.RegisterResource("dokploy:index/environment:Environment", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetEnvironment gets an existing Environment resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetEnvironment(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *EnvironmentState, opts ...pulumi.ResourceOption) (*Environment, error) { + var resource Environment + err := ctx.ReadResource("dokploy:index/environment:Environment", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Environment resources. +type environmentState struct { + // RFC 3339 timestamp of when the environment was created. + CreatedAt *string `pulumi:"createdAt"` + // Free-form description. + Description *string `pulumi:"description"` + // Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + Env *string `pulumi:"env"` + // Whether this is the project's default environment. + IsDefault *bool `pulumi:"isDefault"` + // Environment name, for example `staging`. + Name *string `pulumi:"name"` + // Project this environment belongs to. + ProjectId *string `pulumi:"projectId"` +} + +type EnvironmentState struct { + // RFC 3339 timestamp of when the environment was created. + CreatedAt pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + Env pulumi.StringPtrInput + // Whether this is the project's default environment. + IsDefault pulumi.BoolPtrInput + // Environment name, for example `staging`. + Name pulumi.StringPtrInput + // Project this environment belongs to. + ProjectId pulumi.StringPtrInput +} + +func (EnvironmentState) ElementType() reflect.Type { + return reflect.TypeOf((*environmentState)(nil)).Elem() +} + +type environmentArgs struct { + // Free-form description. + Description *string `pulumi:"description"` + // Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + Env *string `pulumi:"env"` + // Environment name, for example `staging`. + Name *string `pulumi:"name"` + // Project this environment belongs to. + ProjectId string `pulumi:"projectId"` +} + +// The set of arguments for constructing a Environment resource. +type EnvironmentArgs struct { + // Free-form description. + Description pulumi.StringPtrInput + // Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + Env pulumi.StringPtrInput + // Environment name, for example `staging`. + Name pulumi.StringPtrInput + // Project this environment belongs to. + ProjectId pulumi.StringInput +} + +func (EnvironmentArgs) ElementType() reflect.Type { + return reflect.TypeOf((*environmentArgs)(nil)).Elem() +} + +type EnvironmentInput interface { + pulumi.Input + + ToEnvironmentOutput() EnvironmentOutput + ToEnvironmentOutputWithContext(ctx context.Context) EnvironmentOutput +} + +func (*Environment) ElementType() reflect.Type { + return reflect.TypeOf((**Environment)(nil)).Elem() +} + +func (i *Environment) ToEnvironmentOutput() EnvironmentOutput { + return i.ToEnvironmentOutputWithContext(context.Background()) +} + +func (i *Environment) ToEnvironmentOutputWithContext(ctx context.Context) EnvironmentOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentOutput) +} + +// EnvironmentArrayInput is an input type that accepts EnvironmentArray and EnvironmentArrayOutput values. +// You can construct a concrete instance of `EnvironmentArrayInput` via: +// +// EnvironmentArray{ EnvironmentArgs{...} } +type EnvironmentArrayInput interface { + pulumi.Input + + ToEnvironmentArrayOutput() EnvironmentArrayOutput + ToEnvironmentArrayOutputWithContext(context.Context) EnvironmentArrayOutput +} + +type EnvironmentArray []EnvironmentInput + +func (EnvironmentArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Environment)(nil)).Elem() +} + +func (i EnvironmentArray) ToEnvironmentArrayOutput() EnvironmentArrayOutput { + return i.ToEnvironmentArrayOutputWithContext(context.Background()) +} + +func (i EnvironmentArray) ToEnvironmentArrayOutputWithContext(ctx context.Context) EnvironmentArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentArrayOutput) +} + +// EnvironmentMapInput is an input type that accepts EnvironmentMap and EnvironmentMapOutput values. +// You can construct a concrete instance of `EnvironmentMapInput` via: +// +// EnvironmentMap{ "key": EnvironmentArgs{...} } +type EnvironmentMapInput interface { + pulumi.Input + + ToEnvironmentMapOutput() EnvironmentMapOutput + ToEnvironmentMapOutputWithContext(context.Context) EnvironmentMapOutput +} + +type EnvironmentMap map[string]EnvironmentInput + +func (EnvironmentMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Environment)(nil)).Elem() +} + +func (i EnvironmentMap) ToEnvironmentMapOutput() EnvironmentMapOutput { + return i.ToEnvironmentMapOutputWithContext(context.Background()) +} + +func (i EnvironmentMap) ToEnvironmentMapOutputWithContext(ctx context.Context) EnvironmentMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentMapOutput) +} + +type EnvironmentOutput struct{ *pulumi.OutputState } + +func (EnvironmentOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Environment)(nil)).Elem() +} + +func (o EnvironmentOutput) ToEnvironmentOutput() EnvironmentOutput { + return o +} + +func (o EnvironmentOutput) ToEnvironmentOutputWithContext(ctx context.Context) EnvironmentOutput { + return o +} + +// RFC 3339 timestamp of when the environment was created. +func (o EnvironmentOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Environment) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Free-form description. +func (o EnvironmentOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Environment) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. +func (o EnvironmentOutput) Env() pulumi.StringOutput { + return o.ApplyT(func(v *Environment) pulumi.StringOutput { return v.Env }).(pulumi.StringOutput) +} + +// Whether this is the project's default environment. +func (o EnvironmentOutput) IsDefault() pulumi.BoolOutput { + return o.ApplyT(func(v *Environment) pulumi.BoolOutput { return v.IsDefault }).(pulumi.BoolOutput) +} + +// Environment name, for example `staging`. +func (o EnvironmentOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Environment) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Project this environment belongs to. +func (o EnvironmentOutput) ProjectId() pulumi.StringOutput { + return o.ApplyT(func(v *Environment) pulumi.StringOutput { return v.ProjectId }).(pulumi.StringOutput) +} + +type EnvironmentArrayOutput struct{ *pulumi.OutputState } + +func (EnvironmentArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Environment)(nil)).Elem() +} + +func (o EnvironmentArrayOutput) ToEnvironmentArrayOutput() EnvironmentArrayOutput { + return o +} + +func (o EnvironmentArrayOutput) ToEnvironmentArrayOutputWithContext(ctx context.Context) EnvironmentArrayOutput { + return o +} + +func (o EnvironmentArrayOutput) Index(i pulumi.IntInput) EnvironmentOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Environment { + return vs[0].([]*Environment)[vs[1].(int)] + }).(EnvironmentOutput) +} + +type EnvironmentMapOutput struct{ *pulumi.OutputState } + +func (EnvironmentMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Environment)(nil)).Elem() +} + +func (o EnvironmentMapOutput) ToEnvironmentMapOutput() EnvironmentMapOutput { + return o +} + +func (o EnvironmentMapOutput) ToEnvironmentMapOutputWithContext(ctx context.Context) EnvironmentMapOutput { + return o +} + +func (o EnvironmentMapOutput) MapIndex(k pulumi.StringInput) EnvironmentOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Environment { + return vs[0].(map[string]*Environment)[vs[1].(string)] + }).(EnvironmentOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentInput)(nil)).Elem(), &Environment{}) + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentArrayInput)(nil)).Elem(), EnvironmentArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentMapInput)(nil)).Elem(), EnvironmentMap{}) + pulumi.RegisterOutputType(EnvironmentOutput{}) + pulumi.RegisterOutputType(EnvironmentArrayOutput{}) + pulumi.RegisterOutputType(EnvironmentMapOutput{}) +} diff --git a/sdk/go/dokploy/getApplication.go b/sdk/go/dokploy/getApplication.go new file mode 100644 index 0000000..74d18bb --- /dev/null +++ b/sdk/go/dokploy/getApplication.go @@ -0,0 +1,113 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func LookupApplication(ctx *pulumi.Context, args *LookupApplicationArgs, opts ...pulumi.InvokeOption) (*LookupApplicationResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupApplicationResult + err := ctx.Invoke("dokploy:index/getApplication:getApplication", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getApplication. +type LookupApplicationArgs struct { + Id string `pulumi:"id"` +} + +// A collection of values returned by getApplication. +type LookupApplicationResult struct { + AppName string `pulumi:"appName"` + ApplicationStatus string `pulumi:"applicationStatus"` + BuildType string `pulumi:"buildType"` + CreatedAt string `pulumi:"createdAt"` + Description string `pulumi:"description"` + EnvironmentId string `pulumi:"environmentId"` + Id string `pulumi:"id"` + Name string `pulumi:"name"` + SourceType string `pulumi:"sourceType"` +} + +func LookupApplicationOutput(ctx *pulumi.Context, args LookupApplicationOutputArgs, opts ...pulumi.InvokeOption) LookupApplicationResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (LookupApplicationResultOutput, error) { + args := v.(LookupApplicationArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("dokploy:index/getApplication:getApplication", args, LookupApplicationResultOutput{}, options).(LookupApplicationResultOutput), nil + }).(LookupApplicationResultOutput) +} + +// A collection of arguments for invoking getApplication. +type LookupApplicationOutputArgs struct { + Id pulumi.StringInput `pulumi:"id"` +} + +func (LookupApplicationOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupApplicationArgs)(nil)).Elem() +} + +// A collection of values returned by getApplication. +type LookupApplicationResultOutput struct{ *pulumi.OutputState } + +func (LookupApplicationResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupApplicationResult)(nil)).Elem() +} + +func (o LookupApplicationResultOutput) ToLookupApplicationResultOutput() LookupApplicationResultOutput { + return o +} + +func (o LookupApplicationResultOutput) ToLookupApplicationResultOutputWithContext(ctx context.Context) LookupApplicationResultOutput { + return o +} + +func (o LookupApplicationResultOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.AppName }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) BuildType() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.BuildType }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.CreatedAt }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.Description }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.EnvironmentId }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o LookupApplicationResultOutput) SourceType() pulumi.StringOutput { + return o.ApplyT(func(v LookupApplicationResult) string { return v.SourceType }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupApplicationResultOutput{}) +} diff --git a/sdk/go/dokploy/getEnvironment.go b/sdk/go/dokploy/getEnvironment.go new file mode 100644 index 0000000..a105540 --- /dev/null +++ b/sdk/go/dokploy/getEnvironment.go @@ -0,0 +1,103 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func LookupEnvironment(ctx *pulumi.Context, args *LookupEnvironmentArgs, opts ...pulumi.InvokeOption) (*LookupEnvironmentResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupEnvironmentResult + err := ctx.Invoke("dokploy:index/getEnvironment:getEnvironment", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getEnvironment. +type LookupEnvironmentArgs struct { + Id string `pulumi:"id"` +} + +// A collection of values returned by getEnvironment. +type LookupEnvironmentResult struct { + CreatedAt string `pulumi:"createdAt"` + Description string `pulumi:"description"` + Env string `pulumi:"env"` + Id string `pulumi:"id"` + IsDefault bool `pulumi:"isDefault"` + Name string `pulumi:"name"` + ProjectId string `pulumi:"projectId"` +} + +func LookupEnvironmentOutput(ctx *pulumi.Context, args LookupEnvironmentOutputArgs, opts ...pulumi.InvokeOption) LookupEnvironmentResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (LookupEnvironmentResultOutput, error) { + args := v.(LookupEnvironmentArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("dokploy:index/getEnvironment:getEnvironment", args, LookupEnvironmentResultOutput{}, options).(LookupEnvironmentResultOutput), nil + }).(LookupEnvironmentResultOutput) +} + +// A collection of arguments for invoking getEnvironment. +type LookupEnvironmentOutputArgs struct { + Id pulumi.StringInput `pulumi:"id"` +} + +func (LookupEnvironmentOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupEnvironmentArgs)(nil)).Elem() +} + +// A collection of values returned by getEnvironment. +type LookupEnvironmentResultOutput struct{ *pulumi.OutputState } + +func (LookupEnvironmentResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupEnvironmentResult)(nil)).Elem() +} + +func (o LookupEnvironmentResultOutput) ToLookupEnvironmentResultOutput() LookupEnvironmentResultOutput { + return o +} + +func (o LookupEnvironmentResultOutput) ToLookupEnvironmentResultOutputWithContext(ctx context.Context) LookupEnvironmentResultOutput { + return o +} + +func (o LookupEnvironmentResultOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v LookupEnvironmentResult) string { return v.CreatedAt }).(pulumi.StringOutput) +} + +func (o LookupEnvironmentResultOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v LookupEnvironmentResult) string { return v.Description }).(pulumi.StringOutput) +} + +func (o LookupEnvironmentResultOutput) Env() pulumi.StringOutput { + return o.ApplyT(func(v LookupEnvironmentResult) string { return v.Env }).(pulumi.StringOutput) +} + +func (o LookupEnvironmentResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupEnvironmentResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupEnvironmentResultOutput) IsDefault() pulumi.BoolOutput { + return o.ApplyT(func(v LookupEnvironmentResult) bool { return v.IsDefault }).(pulumi.BoolOutput) +} + +func (o LookupEnvironmentResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupEnvironmentResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o LookupEnvironmentResultOutput) ProjectId() pulumi.StringOutput { + return o.ApplyT(func(v LookupEnvironmentResult) string { return v.ProjectId }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupEnvironmentResultOutput{}) +} diff --git a/sdk/go/dokploy/getProject.go b/sdk/go/dokploy/getProject.go new file mode 100644 index 0000000..f8ff334 --- /dev/null +++ b/sdk/go/dokploy/getProject.go @@ -0,0 +1,108 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func LookupProject(ctx *pulumi.Context, args *LookupProjectArgs, opts ...pulumi.InvokeOption) (*LookupProjectResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupProjectResult + err := ctx.Invoke("dokploy:index/getProject:getProject", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getProject. +type LookupProjectArgs struct { + Id string `pulumi:"id"` +} + +// A collection of values returned by getProject. +type LookupProjectResult struct { + CreatedAt string `pulumi:"createdAt"` + DefaultEnvironmentId string `pulumi:"defaultEnvironmentId"` + Description string `pulumi:"description"` + Env string `pulumi:"env"` + Environments []GetProjectEnvironment `pulumi:"environments"` + Id string `pulumi:"id"` + Name string `pulumi:"name"` + OrganizationId string `pulumi:"organizationId"` +} + +func LookupProjectOutput(ctx *pulumi.Context, args LookupProjectOutputArgs, opts ...pulumi.InvokeOption) LookupProjectResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (LookupProjectResultOutput, error) { + args := v.(LookupProjectArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("dokploy:index/getProject:getProject", args, LookupProjectResultOutput{}, options).(LookupProjectResultOutput), nil + }).(LookupProjectResultOutput) +} + +// A collection of arguments for invoking getProject. +type LookupProjectOutputArgs struct { + Id pulumi.StringInput `pulumi:"id"` +} + +func (LookupProjectOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupProjectArgs)(nil)).Elem() +} + +// A collection of values returned by getProject. +type LookupProjectResultOutput struct{ *pulumi.OutputState } + +func (LookupProjectResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupProjectResult)(nil)).Elem() +} + +func (o LookupProjectResultOutput) ToLookupProjectResultOutput() LookupProjectResultOutput { + return o +} + +func (o LookupProjectResultOutput) ToLookupProjectResultOutputWithContext(ctx context.Context) LookupProjectResultOutput { + return o +} + +func (o LookupProjectResultOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.CreatedAt }).(pulumi.StringOutput) +} + +func (o LookupProjectResultOutput) DefaultEnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.DefaultEnvironmentId }).(pulumi.StringOutput) +} + +func (o LookupProjectResultOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.Description }).(pulumi.StringOutput) +} + +func (o LookupProjectResultOutput) Env() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.Env }).(pulumi.StringOutput) +} + +func (o LookupProjectResultOutput) Environments() GetProjectEnvironmentArrayOutput { + return o.ApplyT(func(v LookupProjectResult) []GetProjectEnvironment { return v.Environments }).(GetProjectEnvironmentArrayOutput) +} + +func (o LookupProjectResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupProjectResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o LookupProjectResultOutput) OrganizationId() pulumi.StringOutput { + return o.ApplyT(func(v LookupProjectResult) string { return v.OrganizationId }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupProjectResultOutput{}) +} diff --git a/sdk/go/dokploy/getProjects.go b/sdk/go/dokploy/getProjects.go new file mode 100644 index 0000000..17647ee --- /dev/null +++ b/sdk/go/dokploy/getProjects.go @@ -0,0 +1,57 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func GetProjects(ctx *pulumi.Context, opts ...pulumi.InvokeOption) (*GetProjectsResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetProjectsResult + err := ctx.Invoke("dokploy:index/getProjects:getProjects", nil, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of values returned by getProjects. +type GetProjectsResult struct { + Projects []GetProjectsProject `pulumi:"projects"` +} + +func GetProjectsOutput(ctx *pulumi.Context, opts ...pulumi.InvokeOption) GetProjectsResultOutput { + return pulumi.ToOutput(0).ApplyT(func(int) (GetProjectsResultOutput, error) { + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("dokploy:index/getProjects:getProjects", nil, GetProjectsResultOutput{}, options).(GetProjectsResultOutput), nil + }).(GetProjectsResultOutput) +} + +// A collection of values returned by getProjects. +type GetProjectsResultOutput struct{ *pulumi.OutputState } + +func (GetProjectsResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetProjectsResult)(nil)).Elem() +} + +func (o GetProjectsResultOutput) ToGetProjectsResultOutput() GetProjectsResultOutput { + return o +} + +func (o GetProjectsResultOutput) ToGetProjectsResultOutputWithContext(ctx context.Context) GetProjectsResultOutput { + return o +} + +func (o GetProjectsResultOutput) Projects() GetProjectsProjectArrayOutput { + return o.ApplyT(func(v GetProjectsResult) []GetProjectsProject { return v.Projects }).(GetProjectsProjectArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetProjectsResultOutput{}) +} diff --git a/sdk/go/dokploy/getServers.go b/sdk/go/dokploy/getServers.go new file mode 100644 index 0000000..0dffde2 --- /dev/null +++ b/sdk/go/dokploy/getServers.go @@ -0,0 +1,57 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func GetServers(ctx *pulumi.Context, opts ...pulumi.InvokeOption) (*GetServersResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetServersResult + err := ctx.Invoke("dokploy:index/getServers:getServers", nil, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of values returned by getServers. +type GetServersResult struct { + Servers []GetServersServer `pulumi:"servers"` +} + +func GetServersOutput(ctx *pulumi.Context, opts ...pulumi.InvokeOption) GetServersResultOutput { + return pulumi.ToOutput(0).ApplyT(func(int) (GetServersResultOutput, error) { + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("dokploy:index/getServers:getServers", nil, GetServersResultOutput{}, options).(GetServersResultOutput), nil + }).(GetServersResultOutput) +} + +// A collection of values returned by getServers. +type GetServersResultOutput struct{ *pulumi.OutputState } + +func (GetServersResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetServersResult)(nil)).Elem() +} + +func (o GetServersResultOutput) ToGetServersResultOutput() GetServersResultOutput { + return o +} + +func (o GetServersResultOutput) ToGetServersResultOutputWithContext(ctx context.Context) GetServersResultOutput { + return o +} + +func (o GetServersResultOutput) Servers() GetServersServerArrayOutput { + return o.ApplyT(func(v GetServersResult) []GetServersServer { return v.Servers }).(GetServersServerArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetServersResultOutput{}) +} diff --git a/sdk/go/dokploy/init.go b/sdk/go/dokploy/init.go new file mode 100644 index 0000000..4580a5a --- /dev/null +++ b/sdk/go/dokploy/init.go @@ -0,0 +1,185 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "dokploy:index/application:Application": + r = &Application{} + case "dokploy:index/certificate:Certificate": + r = &Certificate{} + case "dokploy:index/compose:Compose": + r = &Compose{} + case "dokploy:index/destination:Destination": + r = &Destination{} + case "dokploy:index/domain:Domain": + r = &Domain{} + case "dokploy:index/environment:Environment": + r = &Environment{} + case "dokploy:index/mariaDb:MariaDb": + r = &MariaDb{} + case "dokploy:index/mongo:Mongo": + r = &Mongo{} + case "dokploy:index/mount:Mount": + r = &Mount{} + case "dokploy:index/mySql:MySql": + r = &MySql{} + case "dokploy:index/port:Port": + r = &Port{} + case "dokploy:index/postgres:Postgres": + r = &Postgres{} + case "dokploy:index/project:Project": + r = &Project{} + case "dokploy:index/redirect:Redirect": + r = &Redirect{} + case "dokploy:index/redis:Redis": + r = &Redis{} + case "dokploy:index/registry:Registry": + r = &Registry{} + case "dokploy:index/security:Security": + r = &Security{} + case "dokploy:index/sshKey:SshKey": + r = &SshKey{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +type pkg struct { + version semver.Version +} + +func (p *pkg) Version() semver.Version { + return p.version +} + +func (p *pkg) ConstructProvider(ctx *pulumi.Context, name, typ, urn string) (pulumi.ProviderResource, error) { + if typ != "pulumi:providers:dokploy" { + return nil, fmt.Errorf("unknown provider type: %s", typ) + } + + r := &Provider{} + err := ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return r, err +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "dokploy", + "index/application", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/certificate", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/compose", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/destination", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/domain", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/environment", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/mariaDb", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/mongo", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/mount", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/mySql", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/port", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/postgres", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/project", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/redirect", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/redis", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/registry", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/security", + &module{version}, + ) + pulumi.RegisterResourceModule( + "dokploy", + "index/sshKey", + &module{version}, + ) + pulumi.RegisterResourcePackage( + "dokploy", + &pkg{version}, + ) +} diff --git a/sdk/go/dokploy/internal/pulumiUtilities.go b/sdk/go/dokploy/internal/pulumiUtilities.go new file mode 100644 index 0000000..594e44b --- /dev/null +++ b/sdk/go/dokploy/internal/pulumiUtilities.go @@ -0,0 +1,184 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package internal + +import ( + "fmt" + "os" + "reflect" + "regexp" + "strconv" + "strings" + + "github.com/blang/semver" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/internals" +) + +type envParser func(v string) interface{} + +func ParseEnvBool(v string) interface{} { + b, err := strconv.ParseBool(v) + if err != nil { + return nil + } + return b +} + +func ParseEnvInt(v string) interface{} { + i, err := strconv.ParseInt(v, 0, 0) + if err != nil { + return nil + } + return int(i) +} + +func ParseEnvFloat(v string) interface{} { + f, err := strconv.ParseFloat(v, 64) + if err != nil { + return nil + } + return f +} + +func ParseEnvStringArray(v string) interface{} { + var result pulumi.StringArray + for _, item := range strings.Split(v, ";") { + result = append(result, pulumi.String(item)) + } + return result +} + +func GetEnvOrDefault(def interface{}, parser envParser, vars ...string) interface{} { + for _, v := range vars { + if value, ok := os.LookupEnv(v); ok { + if parser != nil { + return parser(value) + } + return value + } + } + return def +} + +// PkgVersion uses reflection to determine the version of the current package. +// If a version cannot be determined, v1 will be assumed. The second return +// value is always nil. +func PkgVersion() (semver.Version, error) { + // emptyVersion defaults to v0.0.0 + if !SdkVersion.Equals(semver.Version{}) { + return SdkVersion, nil + } + type sentinal struct{} + pkgPath := reflect.TypeOf(sentinal{}).PkgPath() + re := regexp.MustCompile("^.*/pulumi-dokploy/sdk(/v\\d+)?") + if match := re.FindStringSubmatch(pkgPath); match != nil { + vStr := match[1] + if len(vStr) == 0 { // If the version capture group was empty, default to v1. + return semver.Version{Major: 1}, nil + } + return semver.MustParse(fmt.Sprintf("%s.0.0", vStr[2:])), nil + } + return semver.Version{Major: 1}, nil +} + +// isZero is a null safe check for if a value is it's types zero value. +func IsZero(v interface{}) bool { + if v == nil { + return true + } + return reflect.ValueOf(v).IsZero() +} + +func CallPlain( + ctx *pulumi.Context, + tok string, + args pulumi.Input, + output pulumi.Output, + self pulumi.Resource, + property string, + resultPtr reflect.Value, + errorPtr *error, + opts ...pulumi.InvokeOption, +) { + res, err := callPlainInner(ctx, tok, args, output, self, opts...) + if err != nil { + *errorPtr = err + return + } + + v := reflect.ValueOf(res) + + // extract res.property field if asked to do so + if property != "" { + v = v.FieldByName("Res") + } + + // return by setting the result pointer; this style of returns shortens the generated code without generics + resultPtr.Elem().Set(v) +} + +func callPlainInner( + ctx *pulumi.Context, + tok string, + args pulumi.Input, + output pulumi.Output, + self pulumi.Resource, + opts ...pulumi.InvokeOption, +) (any, error) { + o, err := ctx.Call(tok, args, output, self, opts...) + if err != nil { + return nil, err + } + + outputData, err := internals.UnsafeAwaitOutput(ctx.Context(), o) + if err != nil { + return nil, err + } + + // Ingoring deps silently. They are typically non-empty, r.f() calls include r as a dependency. + known := outputData.Known + value := outputData.Value + secret := outputData.Secret + + problem := "" + if !known { + problem = "an unknown value" + } else if secret { + problem = "a secret value" + } + + if problem != "" { + return nil, fmt.Errorf("Plain resource method %q incorrectly returned %s. "+ + "This is an error in the provider, please report this to the provider developer.", + tok, problem) + } + + return value, nil +} + +// PkgResourceDefaultOpts provides package level defaults to pulumi.OptionResource. +func PkgResourceDefaultOpts(opts []pulumi.ResourceOption) []pulumi.ResourceOption { + defaults := []pulumi.ResourceOption{} + defaults = append(defaults, pulumi.PluginDownloadURL("github://api.github.com/maxvojtkov/pulumi-dokploy")) + version := semver.MustParse("0.1.0") + if !version.Equals(semver.Version{}) { + defaults = append(defaults, pulumi.Version(version.String())) + } + return append(defaults, opts...) +} + +// PkgInvokeDefaultOpts provides package level defaults to pulumi.OptionInvoke. +func PkgInvokeDefaultOpts(opts []pulumi.InvokeOption) []pulumi.InvokeOption { + defaults := []pulumi.InvokeOption{} + defaults = append(defaults, pulumi.PluginDownloadURL("github://api.github.com/maxvojtkov/pulumi-dokploy")) + version := semver.MustParse("0.1.0") + if !version.Equals(semver.Version{}) { + defaults = append(defaults, pulumi.Version(version.String())) + } + return append(defaults, opts...) +} diff --git a/sdk/go/dokploy/internal/pulumiVersion.go b/sdk/go/dokploy/internal/pulumiVersion.go new file mode 100644 index 0000000..4ad7cb8 --- /dev/null +++ b/sdk/go/dokploy/internal/pulumiVersion.go @@ -0,0 +1,11 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package internal + +import ( + "github.com/blang/semver" +) + +var SdkVersion semver.Version = semver.Version{} +var pluginDownloadURL string = "" diff --git a/sdk/go/dokploy/mariaDb.go b/sdk/go/dokploy/mariaDb.go new file mode 100644 index 0000000..3426ec7 --- /dev/null +++ b/sdk/go/dokploy/mariaDb.go @@ -0,0 +1,731 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type MariaDb struct { + pulumi.CustomResourceState + + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringOutput `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringOutput `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args pulumi.StringArrayOutput `pulumi:"args"` + // Override the container entrypoint command. + Command pulumi.StringPtrOutput `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrOutput `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrOutput `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Name of the database to create. + DatabaseName pulumi.StringOutput `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword pulumi.StringOutput `pulumi:"databasePassword"` + // Password for the MariaDB `root` user. + DatabaseRootPassword pulumi.StringOutput `pulumi:"databaseRootPassword"` + // Database user to create. + DatabaseUser pulumi.StringOutput `pulumi:"databaseUser"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolOutput `pulumi:"detachDokployNetwork"` + // MariaDB image to run, for example `mariadb:11`. + DockerImage pulumi.StringOutput `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrOutput `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrOutput `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrOutput `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrOutput `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrOutput `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrOutput `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrOutput `pulumi:"modeSwarm"` + // Display name of the database. + Name pulumi.StringOutput `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayOutput `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrOutput `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrOutput `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas pulumi.IntOutput `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrOutput `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrOutput `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrOutput `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrOutput `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrOutput `pulumi:"updateConfigSwarm"` +} + +// NewMariaDb registers a new resource with the given unique name, arguments, and options. +func NewMariaDb(ctx *pulumi.Context, + name string, args *MariaDbArgs, opts ...pulumi.ResourceOption) (*MariaDb, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DatabaseName == nil { + return nil, errors.New("invalid value for required argument 'DatabaseName'") + } + if args.DatabasePassword == nil { + return nil, errors.New("invalid value for required argument 'DatabasePassword'") + } + if args.DatabaseRootPassword == nil { + return nil, errors.New("invalid value for required argument 'DatabaseRootPassword'") + } + if args.DatabaseUser == nil { + return nil, errors.New("invalid value for required argument 'DatabaseUser'") + } + if args.DockerImage == nil { + return nil, errors.New("invalid value for required argument 'DockerImage'") + } + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + if args.DatabasePassword != nil { + args.DatabasePassword = pulumi.ToSecret(args.DatabasePassword).(pulumi.StringInput) + } + if args.DatabaseRootPassword != nil { + args.DatabaseRootPassword = pulumi.ToSecret(args.DatabaseRootPassword).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "databasePassword", + "databaseRootPassword", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource MariaDb + err := ctx.RegisterResource("dokploy:index/mariaDb:MariaDb", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMariaDb gets an existing MariaDb resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMariaDb(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MariaDbState, opts ...pulumi.ResourceOption) (*MariaDb, error) { + var resource MariaDb + err := ctx.ReadResource("dokploy:index/mariaDb:MariaDb", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering MariaDb resources. +type mariaDbState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus *string `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt *string `pulumi:"createdAt"` + // Name of the database to create. + DatabaseName *string `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword *string `pulumi:"databasePassword"` + // Password for the MariaDB `root` user. + DatabaseRootPassword *string `pulumi:"databaseRootPassword"` + // Database user to create. + DatabaseUser *string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // MariaDB image to run, for example `mariadb:11`. + DockerImage *string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +type MariaDbState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringPtrInput + // Name of the database to create. + DatabaseName pulumi.StringPtrInput + // Password for the database user. + DatabasePassword pulumi.StringPtrInput + // Password for the MariaDB `root` user. + DatabaseRootPassword pulumi.StringPtrInput + // Database user to create. + DatabaseUser pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // MariaDB image to run, for example `mariadb:11`. + DockerImage pulumi.StringPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringPtrInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (MariaDbState) ElementType() reflect.Type { + return reflect.TypeOf((*mariaDbState)(nil)).Elem() +} + +type mariaDbArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Name of the database to create. + DatabaseName string `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword string `pulumi:"databasePassword"` + // Password for the MariaDB `root` user. + DatabaseRootPassword string `pulumi:"databaseRootPassword"` + // Database user to create. + DatabaseUser string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // MariaDB image to run, for example `mariadb:11`. + DockerImage string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +// The set of arguments for constructing a MariaDb resource. +type MariaDbArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Name of the database to create. + DatabaseName pulumi.StringInput + // Password for the database user. + DatabasePassword pulumi.StringInput + // Password for the MariaDB `root` user. + DatabaseRootPassword pulumi.StringInput + // Database user to create. + DatabaseUser pulumi.StringInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // MariaDB image to run, for example `mariadb:11`. + DockerImage pulumi.StringInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (MariaDbArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mariaDbArgs)(nil)).Elem() +} + +type MariaDbInput interface { + pulumi.Input + + ToMariaDbOutput() MariaDbOutput + ToMariaDbOutputWithContext(ctx context.Context) MariaDbOutput +} + +func (*MariaDb) ElementType() reflect.Type { + return reflect.TypeOf((**MariaDb)(nil)).Elem() +} + +func (i *MariaDb) ToMariaDbOutput() MariaDbOutput { + return i.ToMariaDbOutputWithContext(context.Background()) +} + +func (i *MariaDb) ToMariaDbOutputWithContext(ctx context.Context) MariaDbOutput { + return pulumi.ToOutputWithContext(ctx, i).(MariaDbOutput) +} + +// MariaDbArrayInput is an input type that accepts MariaDbArray and MariaDbArrayOutput values. +// You can construct a concrete instance of `MariaDbArrayInput` via: +// +// MariaDbArray{ MariaDbArgs{...} } +type MariaDbArrayInput interface { + pulumi.Input + + ToMariaDbArrayOutput() MariaDbArrayOutput + ToMariaDbArrayOutputWithContext(context.Context) MariaDbArrayOutput +} + +type MariaDbArray []MariaDbInput + +func (MariaDbArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MariaDb)(nil)).Elem() +} + +func (i MariaDbArray) ToMariaDbArrayOutput() MariaDbArrayOutput { + return i.ToMariaDbArrayOutputWithContext(context.Background()) +} + +func (i MariaDbArray) ToMariaDbArrayOutputWithContext(ctx context.Context) MariaDbArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MariaDbArrayOutput) +} + +// MariaDbMapInput is an input type that accepts MariaDbMap and MariaDbMapOutput values. +// You can construct a concrete instance of `MariaDbMapInput` via: +// +// MariaDbMap{ "key": MariaDbArgs{...} } +type MariaDbMapInput interface { + pulumi.Input + + ToMariaDbMapOutput() MariaDbMapOutput + ToMariaDbMapOutputWithContext(context.Context) MariaDbMapOutput +} + +type MariaDbMap map[string]MariaDbInput + +func (MariaDbMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MariaDb)(nil)).Elem() +} + +func (i MariaDbMap) ToMariaDbMapOutput() MariaDbMapOutput { + return i.ToMariaDbMapOutputWithContext(context.Background()) +} + +func (i MariaDbMap) ToMariaDbMapOutputWithContext(ctx context.Context) MariaDbMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MariaDbMapOutput) +} + +type MariaDbOutput struct{ *pulumi.OutputState } + +func (MariaDbOutput) ElementType() reflect.Type { + return reflect.TypeOf((**MariaDb)(nil)).Elem() +} + +func (o MariaDbOutput) ToMariaDbOutput() MariaDbOutput { + return o +} + +func (o MariaDbOutput) ToMariaDbOutputWithContext(ctx context.Context) MariaDbOutput { + return o +} + +// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. +func (o MariaDbOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o MariaDbOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +// Arguments appended to the container command. +func (o MariaDbOutput) Args() pulumi.StringArrayOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringArrayOutput { return v.Args }).(pulumi.StringArrayOutput) +} + +// Override the container entrypoint command. +func (o MariaDbOutput) Command() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.Command }).(pulumi.StringPtrOutput) +} + +// Hard CPU limit, for example `1`. +func (o MariaDbOutput) CpuLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.CpuLimit }).(pulumi.StringPtrOutput) +} + +// Soft CPU reservation, for example `0.5`. +func (o MariaDbOutput) CpuReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.CpuReservation }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the database was created. +func (o MariaDbOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Name of the database to create. +func (o MariaDbOutput) DatabaseName() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.DatabaseName }).(pulumi.StringOutput) +} + +// Password for the database user. +func (o MariaDbOutput) DatabasePassword() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.DatabasePassword }).(pulumi.StringOutput) +} + +// Password for the MariaDB `root` user. +func (o MariaDbOutput) DatabaseRootPassword() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.DatabaseRootPassword }).(pulumi.StringOutput) +} + +// Database user to create. +func (o MariaDbOutput) DatabaseUser() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.DatabaseUser }).(pulumi.StringOutput) +} + +// Free-form description. +func (o MariaDbOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Detach the service from the shared `dokploy-network`. +func (o MariaDbOutput) DetachDokployNetwork() pulumi.BoolOutput { + return o.ApplyT(func(v *MariaDb) pulumi.BoolOutput { return v.DetachDokployNetwork }).(pulumi.BoolOutput) +} + +// MariaDB image to run, for example `mariadb:11`. +func (o MariaDbOutput) DockerImage() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.DockerImage }).(pulumi.StringOutput) +} + +// Docker Swarm endpoint specification, as a JSON object. +func (o MariaDbOutput) EndpointSpecSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.EndpointSpecSwarm }).(pulumi.StringPtrOutput) +} + +// Environment variables in `KEY=value` format, one per line. +func (o MariaDbOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this database belongs to. +func (o MariaDbOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. +func (o MariaDbOutput) ExternalPort() pulumi.IntPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.IntPtrOutput { return v.ExternalPort }).(pulumi.IntPtrOutput) +} + +// Docker Swarm health check configuration, as a JSON object. +func (o MariaDbOutput) HealthCheckSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.HealthCheckSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service labels, as a JSON object. +func (o MariaDbOutput) LabelsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.LabelsSwarm }).(pulumi.StringPtrOutput) +} + +// Hard memory limit, for example `512m`. +func (o MariaDbOutput) MemoryLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.MemoryLimit }).(pulumi.StringPtrOutput) +} + +// Soft memory reservation, for example `256m`. +func (o MariaDbOutput) MemoryReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.MemoryReservation }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service mode, as a JSON object. +func (o MariaDbOutput) ModeSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.ModeSwarm }).(pulumi.StringPtrOutput) +} + +// Display name of the database. +func (o MariaDbOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// IDs of additional Docker networks to attach. +func (o MariaDbOutput) NetworkIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringArrayOutput { return v.NetworkIds }).(pulumi.StringArrayOutput) +} + +// Docker Swarm network attachments, as a JSON array. +func (o MariaDbOutput) NetworkSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.NetworkSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm placement constraints, as a JSON object. +func (o MariaDbOutput) PlacementSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.PlacementSwarm }).(pulumi.StringPtrOutput) +} + +// Number of replicas to run. +func (o MariaDbOutput) Replicas() pulumi.IntOutput { + return o.ApplyT(func(v *MariaDb) pulumi.IntOutput { return v.Replicas }).(pulumi.IntOutput) +} + +// Docker Swarm restart policy, as a JSON object. +func (o MariaDbOutput) RestartPolicySwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.RestartPolicySwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rollback configuration, as a JSON object. +func (o MariaDbOutput) RollbackConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.RollbackConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o MariaDbOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Grace period in nanoseconds before a container is killed. +func (o MariaDbOutput) StopGracePeriodSwarm() pulumi.IntPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.IntPtrOutput { return v.StopGracePeriodSwarm }).(pulumi.IntPtrOutput) +} + +// Docker Swarm ulimits, as a JSON object. +func (o MariaDbOutput) UlimitsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.UlimitsSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rolling update configuration, as a JSON object. +func (o MariaDbOutput) UpdateConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MariaDb) pulumi.StringPtrOutput { return v.UpdateConfigSwarm }).(pulumi.StringPtrOutput) +} + +type MariaDbArrayOutput struct{ *pulumi.OutputState } + +func (MariaDbArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MariaDb)(nil)).Elem() +} + +func (o MariaDbArrayOutput) ToMariaDbArrayOutput() MariaDbArrayOutput { + return o +} + +func (o MariaDbArrayOutput) ToMariaDbArrayOutputWithContext(ctx context.Context) MariaDbArrayOutput { + return o +} + +func (o MariaDbArrayOutput) Index(i pulumi.IntInput) MariaDbOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *MariaDb { + return vs[0].([]*MariaDb)[vs[1].(int)] + }).(MariaDbOutput) +} + +type MariaDbMapOutput struct{ *pulumi.OutputState } + +func (MariaDbMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MariaDb)(nil)).Elem() +} + +func (o MariaDbMapOutput) ToMariaDbMapOutput() MariaDbMapOutput { + return o +} + +func (o MariaDbMapOutput) ToMariaDbMapOutputWithContext(ctx context.Context) MariaDbMapOutput { + return o +} + +func (o MariaDbMapOutput) MapIndex(k pulumi.StringInput) MariaDbOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *MariaDb { + return vs[0].(map[string]*MariaDb)[vs[1].(string)] + }).(MariaDbOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MariaDbInput)(nil)).Elem(), &MariaDb{}) + pulumi.RegisterInputType(reflect.TypeOf((*MariaDbArrayInput)(nil)).Elem(), MariaDbArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MariaDbMapInput)(nil)).Elem(), MariaDbMap{}) + pulumi.RegisterOutputType(MariaDbOutput{}) + pulumi.RegisterOutputType(MariaDbArrayOutput{}) + pulumi.RegisterOutputType(MariaDbMapOutput{}) +} diff --git a/sdk/go/dokploy/mongo.go b/sdk/go/dokploy/mongo.go new file mode 100644 index 0000000..3160c7a --- /dev/null +++ b/sdk/go/dokploy/mongo.go @@ -0,0 +1,703 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Mongo struct { + pulumi.CustomResourceState + + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringOutput `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringOutput `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args pulumi.StringArrayOutput `pulumi:"args"` + // Override the container entrypoint command. + Command pulumi.StringPtrOutput `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrOutput `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrOutput `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Password for the root user. + DatabasePassword pulumi.StringOutput `pulumi:"databasePassword"` + // Root username to create. + DatabaseUser pulumi.StringOutput `pulumi:"databaseUser"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolOutput `pulumi:"detachDokployNetwork"` + // MongoDB image to run. Defaults to `mongo:8`. + DockerImage pulumi.StringOutput `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrOutput `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrOutput `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrOutput `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrOutput `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrOutput `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrOutput `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrOutput `pulumi:"modeSwarm"` + // Display name of the database. + Name pulumi.StringOutput `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayOutput `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrOutput `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrOutput `pulumi:"placementSwarm"` + // Start the instance as a single-node replica set. + ReplicaSets pulumi.BoolOutput `pulumi:"replicaSets"` + // Number of replicas to run. + Replicas pulumi.IntOutput `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrOutput `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrOutput `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrOutput `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrOutput `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrOutput `pulumi:"updateConfigSwarm"` +} + +// NewMongo registers a new resource with the given unique name, arguments, and options. +func NewMongo(ctx *pulumi.Context, + name string, args *MongoArgs, opts ...pulumi.ResourceOption) (*Mongo, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DatabasePassword == nil { + return nil, errors.New("invalid value for required argument 'DatabasePassword'") + } + if args.DatabaseUser == nil { + return nil, errors.New("invalid value for required argument 'DatabaseUser'") + } + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + if args.DatabasePassword != nil { + args.DatabasePassword = pulumi.ToSecret(args.DatabasePassword).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "databasePassword", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Mongo + err := ctx.RegisterResource("dokploy:index/mongo:Mongo", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMongo gets an existing Mongo resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMongo(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MongoState, opts ...pulumi.ResourceOption) (*Mongo, error) { + var resource Mongo + err := ctx.ReadResource("dokploy:index/mongo:Mongo", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Mongo resources. +type mongoState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus *string `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt *string `pulumi:"createdAt"` + // Password for the root user. + DatabasePassword *string `pulumi:"databasePassword"` + // Root username to create. + DatabaseUser *string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // MongoDB image to run. Defaults to `mongo:8`. + DockerImage *string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Start the instance as a single-node replica set. + ReplicaSets *bool `pulumi:"replicaSets"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +type MongoState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringPtrInput + // Password for the root user. + DatabasePassword pulumi.StringPtrInput + // Root username to create. + DatabaseUser pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // MongoDB image to run. Defaults to `mongo:8`. + DockerImage pulumi.StringPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringPtrInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Start the instance as a single-node replica set. + ReplicaSets pulumi.BoolPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (MongoState) ElementType() reflect.Type { + return reflect.TypeOf((*mongoState)(nil)).Elem() +} + +type mongoArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Password for the root user. + DatabasePassword string `pulumi:"databasePassword"` + // Root username to create. + DatabaseUser string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // MongoDB image to run. Defaults to `mongo:8`. + DockerImage *string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Start the instance as a single-node replica set. + ReplicaSets *bool `pulumi:"replicaSets"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +// The set of arguments for constructing a Mongo resource. +type MongoArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Password for the root user. + DatabasePassword pulumi.StringInput + // Root username to create. + DatabaseUser pulumi.StringInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // MongoDB image to run. Defaults to `mongo:8`. + DockerImage pulumi.StringPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Start the instance as a single-node replica set. + ReplicaSets pulumi.BoolPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (MongoArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mongoArgs)(nil)).Elem() +} + +type MongoInput interface { + pulumi.Input + + ToMongoOutput() MongoOutput + ToMongoOutputWithContext(ctx context.Context) MongoOutput +} + +func (*Mongo) ElementType() reflect.Type { + return reflect.TypeOf((**Mongo)(nil)).Elem() +} + +func (i *Mongo) ToMongoOutput() MongoOutput { + return i.ToMongoOutputWithContext(context.Background()) +} + +func (i *Mongo) ToMongoOutputWithContext(ctx context.Context) MongoOutput { + return pulumi.ToOutputWithContext(ctx, i).(MongoOutput) +} + +// MongoArrayInput is an input type that accepts MongoArray and MongoArrayOutput values. +// You can construct a concrete instance of `MongoArrayInput` via: +// +// MongoArray{ MongoArgs{...} } +type MongoArrayInput interface { + pulumi.Input + + ToMongoArrayOutput() MongoArrayOutput + ToMongoArrayOutputWithContext(context.Context) MongoArrayOutput +} + +type MongoArray []MongoInput + +func (MongoArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Mongo)(nil)).Elem() +} + +func (i MongoArray) ToMongoArrayOutput() MongoArrayOutput { + return i.ToMongoArrayOutputWithContext(context.Background()) +} + +func (i MongoArray) ToMongoArrayOutputWithContext(ctx context.Context) MongoArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MongoArrayOutput) +} + +// MongoMapInput is an input type that accepts MongoMap and MongoMapOutput values. +// You can construct a concrete instance of `MongoMapInput` via: +// +// MongoMap{ "key": MongoArgs{...} } +type MongoMapInput interface { + pulumi.Input + + ToMongoMapOutput() MongoMapOutput + ToMongoMapOutputWithContext(context.Context) MongoMapOutput +} + +type MongoMap map[string]MongoInput + +func (MongoMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Mongo)(nil)).Elem() +} + +func (i MongoMap) ToMongoMapOutput() MongoMapOutput { + return i.ToMongoMapOutputWithContext(context.Background()) +} + +func (i MongoMap) ToMongoMapOutputWithContext(ctx context.Context) MongoMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MongoMapOutput) +} + +type MongoOutput struct{ *pulumi.OutputState } + +func (MongoOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Mongo)(nil)).Elem() +} + +func (o MongoOutput) ToMongoOutput() MongoOutput { + return o +} + +func (o MongoOutput) ToMongoOutputWithContext(ctx context.Context) MongoOutput { + return o +} + +// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. +func (o MongoOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o MongoOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +// Arguments appended to the container command. +func (o MongoOutput) Args() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringArrayOutput { return v.Args }).(pulumi.StringArrayOutput) +} + +// Override the container entrypoint command. +func (o MongoOutput) Command() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.Command }).(pulumi.StringPtrOutput) +} + +// Hard CPU limit, for example `1`. +func (o MongoOutput) CpuLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.CpuLimit }).(pulumi.StringPtrOutput) +} + +// Soft CPU reservation, for example `0.5`. +func (o MongoOutput) CpuReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.CpuReservation }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the database was created. +func (o MongoOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Password for the root user. +func (o MongoOutput) DatabasePassword() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.DatabasePassword }).(pulumi.StringOutput) +} + +// Root username to create. +func (o MongoOutput) DatabaseUser() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.DatabaseUser }).(pulumi.StringOutput) +} + +// Free-form description. +func (o MongoOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Detach the service from the shared `dokploy-network`. +func (o MongoOutput) DetachDokployNetwork() pulumi.BoolOutput { + return o.ApplyT(func(v *Mongo) pulumi.BoolOutput { return v.DetachDokployNetwork }).(pulumi.BoolOutput) +} + +// MongoDB image to run. Defaults to `mongo:8`. +func (o MongoOutput) DockerImage() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.DockerImage }).(pulumi.StringOutput) +} + +// Docker Swarm endpoint specification, as a JSON object. +func (o MongoOutput) EndpointSpecSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.EndpointSpecSwarm }).(pulumi.StringPtrOutput) +} + +// Environment variables in `KEY=value` format, one per line. +func (o MongoOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this database belongs to. +func (o MongoOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. +func (o MongoOutput) ExternalPort() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.IntPtrOutput { return v.ExternalPort }).(pulumi.IntPtrOutput) +} + +// Docker Swarm health check configuration, as a JSON object. +func (o MongoOutput) HealthCheckSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.HealthCheckSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service labels, as a JSON object. +func (o MongoOutput) LabelsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.LabelsSwarm }).(pulumi.StringPtrOutput) +} + +// Hard memory limit, for example `512m`. +func (o MongoOutput) MemoryLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.MemoryLimit }).(pulumi.StringPtrOutput) +} + +// Soft memory reservation, for example `256m`. +func (o MongoOutput) MemoryReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.MemoryReservation }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service mode, as a JSON object. +func (o MongoOutput) ModeSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.ModeSwarm }).(pulumi.StringPtrOutput) +} + +// Display name of the database. +func (o MongoOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// IDs of additional Docker networks to attach. +func (o MongoOutput) NetworkIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringArrayOutput { return v.NetworkIds }).(pulumi.StringArrayOutput) +} + +// Docker Swarm network attachments, as a JSON array. +func (o MongoOutput) NetworkSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.NetworkSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm placement constraints, as a JSON object. +func (o MongoOutput) PlacementSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.PlacementSwarm }).(pulumi.StringPtrOutput) +} + +// Start the instance as a single-node replica set. +func (o MongoOutput) ReplicaSets() pulumi.BoolOutput { + return o.ApplyT(func(v *Mongo) pulumi.BoolOutput { return v.ReplicaSets }).(pulumi.BoolOutput) +} + +// Number of replicas to run. +func (o MongoOutput) Replicas() pulumi.IntOutput { + return o.ApplyT(func(v *Mongo) pulumi.IntOutput { return v.Replicas }).(pulumi.IntOutput) +} + +// Docker Swarm restart policy, as a JSON object. +func (o MongoOutput) RestartPolicySwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.RestartPolicySwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rollback configuration, as a JSON object. +func (o MongoOutput) RollbackConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.RollbackConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o MongoOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Grace period in nanoseconds before a container is killed. +func (o MongoOutput) StopGracePeriodSwarm() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.IntPtrOutput { return v.StopGracePeriodSwarm }).(pulumi.IntPtrOutput) +} + +// Docker Swarm ulimits, as a JSON object. +func (o MongoOutput) UlimitsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.UlimitsSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rolling update configuration, as a JSON object. +func (o MongoOutput) UpdateConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mongo) pulumi.StringPtrOutput { return v.UpdateConfigSwarm }).(pulumi.StringPtrOutput) +} + +type MongoArrayOutput struct{ *pulumi.OutputState } + +func (MongoArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Mongo)(nil)).Elem() +} + +func (o MongoArrayOutput) ToMongoArrayOutput() MongoArrayOutput { + return o +} + +func (o MongoArrayOutput) ToMongoArrayOutputWithContext(ctx context.Context) MongoArrayOutput { + return o +} + +func (o MongoArrayOutput) Index(i pulumi.IntInput) MongoOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Mongo { + return vs[0].([]*Mongo)[vs[1].(int)] + }).(MongoOutput) +} + +type MongoMapOutput struct{ *pulumi.OutputState } + +func (MongoMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Mongo)(nil)).Elem() +} + +func (o MongoMapOutput) ToMongoMapOutput() MongoMapOutput { + return o +} + +func (o MongoMapOutput) ToMongoMapOutputWithContext(ctx context.Context) MongoMapOutput { + return o +} + +func (o MongoMapOutput) MapIndex(k pulumi.StringInput) MongoOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Mongo { + return vs[0].(map[string]*Mongo)[vs[1].(string)] + }).(MongoOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MongoInput)(nil)).Elem(), &Mongo{}) + pulumi.RegisterInputType(reflect.TypeOf((*MongoArrayInput)(nil)).Elem(), MongoArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MongoMapInput)(nil)).Elem(), MongoMap{}) + pulumi.RegisterOutputType(MongoOutput{}) + pulumi.RegisterOutputType(MongoArrayOutput{}) + pulumi.RegisterOutputType(MongoMapOutput{}) +} diff --git a/sdk/go/dokploy/mount.go b/sdk/go/dokploy/mount.go new file mode 100644 index 0000000..d1da2cd --- /dev/null +++ b/sdk/go/dokploy/mount.go @@ -0,0 +1,332 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Mount struct { + pulumi.CustomResourceState + + // Contents of the generated file, when `type` is `file`. + Content pulumi.StringPtrOutput `pulumi:"content"` + // Path of the generated file, when `type` is `file`. + FilePath pulumi.StringPtrOutput `pulumi:"filePath"` + // Path on the host, when `type` is `bind`. + HostPath pulumi.StringPtrOutput `pulumi:"hostPath"` + // Path inside the container where the mount appears. + MountPath pulumi.StringOutput `pulumi:"mountPath"` + // ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + ServiceId pulumi.StringOutput `pulumi:"serviceId"` + // The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + ServiceType pulumi.StringOutput `pulumi:"serviceType"` + // The kind of mount to create. Valid values: `bind`, `volume`, `file`. + Type pulumi.StringOutput `pulumi:"type"` + // Name of the Docker volume, when `type` is `volume`. + VolumeName pulumi.StringPtrOutput `pulumi:"volumeName"` +} + +// NewMount registers a new resource with the given unique name, arguments, and options. +func NewMount(ctx *pulumi.Context, + name string, args *MountArgs, opts ...pulumi.ResourceOption) (*Mount, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.MountPath == nil { + return nil, errors.New("invalid value for required argument 'MountPath'") + } + if args.ServiceId == nil { + return nil, errors.New("invalid value for required argument 'ServiceId'") + } + if args.ServiceType == nil { + return nil, errors.New("invalid value for required argument 'ServiceType'") + } + if args.Type == nil { + return nil, errors.New("invalid value for required argument 'Type'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Mount + err := ctx.RegisterResource("dokploy:index/mount:Mount", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMount gets an existing Mount resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMount(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MountState, opts ...pulumi.ResourceOption) (*Mount, error) { + var resource Mount + err := ctx.ReadResource("dokploy:index/mount:Mount", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Mount resources. +type mountState struct { + // Contents of the generated file, when `type` is `file`. + Content *string `pulumi:"content"` + // Path of the generated file, when `type` is `file`. + FilePath *string `pulumi:"filePath"` + // Path on the host, when `type` is `bind`. + HostPath *string `pulumi:"hostPath"` + // Path inside the container where the mount appears. + MountPath *string `pulumi:"mountPath"` + // ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + ServiceId *string `pulumi:"serviceId"` + // The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + ServiceType *string `pulumi:"serviceType"` + // The kind of mount to create. Valid values: `bind`, `volume`, `file`. + Type *string `pulumi:"type"` + // Name of the Docker volume, when `type` is `volume`. + VolumeName *string `pulumi:"volumeName"` +} + +type MountState struct { + // Contents of the generated file, when `type` is `file`. + Content pulumi.StringPtrInput + // Path of the generated file, when `type` is `file`. + FilePath pulumi.StringPtrInput + // Path on the host, when `type` is `bind`. + HostPath pulumi.StringPtrInput + // Path inside the container where the mount appears. + MountPath pulumi.StringPtrInput + // ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + ServiceId pulumi.StringPtrInput + // The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + ServiceType pulumi.StringPtrInput + // The kind of mount to create. Valid values: `bind`, `volume`, `file`. + Type pulumi.StringPtrInput + // Name of the Docker volume, when `type` is `volume`. + VolumeName pulumi.StringPtrInput +} + +func (MountState) ElementType() reflect.Type { + return reflect.TypeOf((*mountState)(nil)).Elem() +} + +type mountArgs struct { + // Contents of the generated file, when `type` is `file`. + Content *string `pulumi:"content"` + // Path of the generated file, when `type` is `file`. + FilePath *string `pulumi:"filePath"` + // Path on the host, when `type` is `bind`. + HostPath *string `pulumi:"hostPath"` + // Path inside the container where the mount appears. + MountPath string `pulumi:"mountPath"` + // ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + ServiceId string `pulumi:"serviceId"` + // The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + ServiceType string `pulumi:"serviceType"` + // The kind of mount to create. Valid values: `bind`, `volume`, `file`. + Type string `pulumi:"type"` + // Name of the Docker volume, when `type` is `volume`. + VolumeName *string `pulumi:"volumeName"` +} + +// The set of arguments for constructing a Mount resource. +type MountArgs struct { + // Contents of the generated file, when `type` is `file`. + Content pulumi.StringPtrInput + // Path of the generated file, when `type` is `file`. + FilePath pulumi.StringPtrInput + // Path on the host, when `type` is `bind`. + HostPath pulumi.StringPtrInput + // Path inside the container where the mount appears. + MountPath pulumi.StringInput + // ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + ServiceId pulumi.StringInput + // The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + ServiceType pulumi.StringInput + // The kind of mount to create. Valid values: `bind`, `volume`, `file`. + Type pulumi.StringInput + // Name of the Docker volume, when `type` is `volume`. + VolumeName pulumi.StringPtrInput +} + +func (MountArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mountArgs)(nil)).Elem() +} + +type MountInput interface { + pulumi.Input + + ToMountOutput() MountOutput + ToMountOutputWithContext(ctx context.Context) MountOutput +} + +func (*Mount) ElementType() reflect.Type { + return reflect.TypeOf((**Mount)(nil)).Elem() +} + +func (i *Mount) ToMountOutput() MountOutput { + return i.ToMountOutputWithContext(context.Background()) +} + +func (i *Mount) ToMountOutputWithContext(ctx context.Context) MountOutput { + return pulumi.ToOutputWithContext(ctx, i).(MountOutput) +} + +// MountArrayInput is an input type that accepts MountArray and MountArrayOutput values. +// You can construct a concrete instance of `MountArrayInput` via: +// +// MountArray{ MountArgs{...} } +type MountArrayInput interface { + pulumi.Input + + ToMountArrayOutput() MountArrayOutput + ToMountArrayOutputWithContext(context.Context) MountArrayOutput +} + +type MountArray []MountInput + +func (MountArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Mount)(nil)).Elem() +} + +func (i MountArray) ToMountArrayOutput() MountArrayOutput { + return i.ToMountArrayOutputWithContext(context.Background()) +} + +func (i MountArray) ToMountArrayOutputWithContext(ctx context.Context) MountArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MountArrayOutput) +} + +// MountMapInput is an input type that accepts MountMap and MountMapOutput values. +// You can construct a concrete instance of `MountMapInput` via: +// +// MountMap{ "key": MountArgs{...} } +type MountMapInput interface { + pulumi.Input + + ToMountMapOutput() MountMapOutput + ToMountMapOutputWithContext(context.Context) MountMapOutput +} + +type MountMap map[string]MountInput + +func (MountMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Mount)(nil)).Elem() +} + +func (i MountMap) ToMountMapOutput() MountMapOutput { + return i.ToMountMapOutputWithContext(context.Background()) +} + +func (i MountMap) ToMountMapOutputWithContext(ctx context.Context) MountMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MountMapOutput) +} + +type MountOutput struct{ *pulumi.OutputState } + +func (MountOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Mount)(nil)).Elem() +} + +func (o MountOutput) ToMountOutput() MountOutput { + return o +} + +func (o MountOutput) ToMountOutputWithContext(ctx context.Context) MountOutput { + return o +} + +// Contents of the generated file, when `type` is `file`. +func (o MountOutput) Content() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mount) pulumi.StringPtrOutput { return v.Content }).(pulumi.StringPtrOutput) +} + +// Path of the generated file, when `type` is `file`. +func (o MountOutput) FilePath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mount) pulumi.StringPtrOutput { return v.FilePath }).(pulumi.StringPtrOutput) +} + +// Path on the host, when `type` is `bind`. +func (o MountOutput) HostPath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mount) pulumi.StringPtrOutput { return v.HostPath }).(pulumi.StringPtrOutput) +} + +// Path inside the container where the mount appears. +func (o MountOutput) MountPath() pulumi.StringOutput { + return o.ApplyT(func(v *Mount) pulumi.StringOutput { return v.MountPath }).(pulumi.StringOutput) +} + +// ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. +func (o MountOutput) ServiceId() pulumi.StringOutput { + return o.ApplyT(func(v *Mount) pulumi.StringOutput { return v.ServiceId }).(pulumi.StringOutput) +} + +// The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. +func (o MountOutput) ServiceType() pulumi.StringOutput { + return o.ApplyT(func(v *Mount) pulumi.StringOutput { return v.ServiceType }).(pulumi.StringOutput) +} + +// The kind of mount to create. Valid values: `bind`, `volume`, `file`. +func (o MountOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v *Mount) pulumi.StringOutput { return v.Type }).(pulumi.StringOutput) +} + +// Name of the Docker volume, when `type` is `volume`. +func (o MountOutput) VolumeName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Mount) pulumi.StringPtrOutput { return v.VolumeName }).(pulumi.StringPtrOutput) +} + +type MountArrayOutput struct{ *pulumi.OutputState } + +func (MountArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Mount)(nil)).Elem() +} + +func (o MountArrayOutput) ToMountArrayOutput() MountArrayOutput { + return o +} + +func (o MountArrayOutput) ToMountArrayOutputWithContext(ctx context.Context) MountArrayOutput { + return o +} + +func (o MountArrayOutput) Index(i pulumi.IntInput) MountOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Mount { + return vs[0].([]*Mount)[vs[1].(int)] + }).(MountOutput) +} + +type MountMapOutput struct{ *pulumi.OutputState } + +func (MountMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Mount)(nil)).Elem() +} + +func (o MountMapOutput) ToMountMapOutput() MountMapOutput { + return o +} + +func (o MountMapOutput) ToMountMapOutputWithContext(ctx context.Context) MountMapOutput { + return o +} + +func (o MountMapOutput) MapIndex(k pulumi.StringInput) MountOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Mount { + return vs[0].(map[string]*Mount)[vs[1].(string)] + }).(MountOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MountInput)(nil)).Elem(), &Mount{}) + pulumi.RegisterInputType(reflect.TypeOf((*MountArrayInput)(nil)).Elem(), MountArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MountMapInput)(nil)).Elem(), MountMap{}) + pulumi.RegisterOutputType(MountOutput{}) + pulumi.RegisterOutputType(MountArrayOutput{}) + pulumi.RegisterOutputType(MountMapOutput{}) +} diff --git a/sdk/go/dokploy/mySql.go b/sdk/go/dokploy/mySql.go new file mode 100644 index 0000000..2fed0a3 --- /dev/null +++ b/sdk/go/dokploy/mySql.go @@ -0,0 +1,731 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type MySql struct { + pulumi.CustomResourceState + + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringOutput `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringOutput `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args pulumi.StringArrayOutput `pulumi:"args"` + // Override the container entrypoint command. + Command pulumi.StringPtrOutput `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrOutput `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrOutput `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Name of the database to create. + DatabaseName pulumi.StringOutput `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword pulumi.StringOutput `pulumi:"databasePassword"` + // Password for the MySQL `root` user. + DatabaseRootPassword pulumi.StringOutput `pulumi:"databaseRootPassword"` + // Database user to create. + DatabaseUser pulumi.StringOutput `pulumi:"databaseUser"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolOutput `pulumi:"detachDokployNetwork"` + // MySQL image to run, for example `mysql:8`. + DockerImage pulumi.StringOutput `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrOutput `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrOutput `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrOutput `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrOutput `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrOutput `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrOutput `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrOutput `pulumi:"modeSwarm"` + // Display name of the database. + Name pulumi.StringOutput `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayOutput `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrOutput `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrOutput `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas pulumi.IntOutput `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrOutput `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrOutput `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrOutput `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrOutput `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrOutput `pulumi:"updateConfigSwarm"` +} + +// NewMySql registers a new resource with the given unique name, arguments, and options. +func NewMySql(ctx *pulumi.Context, + name string, args *MySqlArgs, opts ...pulumi.ResourceOption) (*MySql, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DatabaseName == nil { + return nil, errors.New("invalid value for required argument 'DatabaseName'") + } + if args.DatabasePassword == nil { + return nil, errors.New("invalid value for required argument 'DatabasePassword'") + } + if args.DatabaseRootPassword == nil { + return nil, errors.New("invalid value for required argument 'DatabaseRootPassword'") + } + if args.DatabaseUser == nil { + return nil, errors.New("invalid value for required argument 'DatabaseUser'") + } + if args.DockerImage == nil { + return nil, errors.New("invalid value for required argument 'DockerImage'") + } + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + if args.DatabasePassword != nil { + args.DatabasePassword = pulumi.ToSecret(args.DatabasePassword).(pulumi.StringInput) + } + if args.DatabaseRootPassword != nil { + args.DatabaseRootPassword = pulumi.ToSecret(args.DatabaseRootPassword).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "databasePassword", + "databaseRootPassword", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource MySql + err := ctx.RegisterResource("dokploy:index/mySql:MySql", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMySql gets an existing MySql resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMySql(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MySqlState, opts ...pulumi.ResourceOption) (*MySql, error) { + var resource MySql + err := ctx.ReadResource("dokploy:index/mySql:MySql", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering MySql resources. +type mySqlState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus *string `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt *string `pulumi:"createdAt"` + // Name of the database to create. + DatabaseName *string `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword *string `pulumi:"databasePassword"` + // Password for the MySQL `root` user. + DatabaseRootPassword *string `pulumi:"databaseRootPassword"` + // Database user to create. + DatabaseUser *string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // MySQL image to run, for example `mysql:8`. + DockerImage *string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +type MySqlState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringPtrInput + // Name of the database to create. + DatabaseName pulumi.StringPtrInput + // Password for the database user. + DatabasePassword pulumi.StringPtrInput + // Password for the MySQL `root` user. + DatabaseRootPassword pulumi.StringPtrInput + // Database user to create. + DatabaseUser pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // MySQL image to run, for example `mysql:8`. + DockerImage pulumi.StringPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringPtrInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (MySqlState) ElementType() reflect.Type { + return reflect.TypeOf((*mySqlState)(nil)).Elem() +} + +type mySqlArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Name of the database to create. + DatabaseName string `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword string `pulumi:"databasePassword"` + // Password for the MySQL `root` user. + DatabaseRootPassword string `pulumi:"databaseRootPassword"` + // Database user to create. + DatabaseUser string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // MySQL image to run, for example `mysql:8`. + DockerImage string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +// The set of arguments for constructing a MySql resource. +type MySqlArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Name of the database to create. + DatabaseName pulumi.StringInput + // Password for the database user. + DatabasePassword pulumi.StringInput + // Password for the MySQL `root` user. + DatabaseRootPassword pulumi.StringInput + // Database user to create. + DatabaseUser pulumi.StringInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // MySQL image to run, for example `mysql:8`. + DockerImage pulumi.StringInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (MySqlArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mySqlArgs)(nil)).Elem() +} + +type MySqlInput interface { + pulumi.Input + + ToMySqlOutput() MySqlOutput + ToMySqlOutputWithContext(ctx context.Context) MySqlOutput +} + +func (*MySql) ElementType() reflect.Type { + return reflect.TypeOf((**MySql)(nil)).Elem() +} + +func (i *MySql) ToMySqlOutput() MySqlOutput { + return i.ToMySqlOutputWithContext(context.Background()) +} + +func (i *MySql) ToMySqlOutputWithContext(ctx context.Context) MySqlOutput { + return pulumi.ToOutputWithContext(ctx, i).(MySqlOutput) +} + +// MySqlArrayInput is an input type that accepts MySqlArray and MySqlArrayOutput values. +// You can construct a concrete instance of `MySqlArrayInput` via: +// +// MySqlArray{ MySqlArgs{...} } +type MySqlArrayInput interface { + pulumi.Input + + ToMySqlArrayOutput() MySqlArrayOutput + ToMySqlArrayOutputWithContext(context.Context) MySqlArrayOutput +} + +type MySqlArray []MySqlInput + +func (MySqlArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MySql)(nil)).Elem() +} + +func (i MySqlArray) ToMySqlArrayOutput() MySqlArrayOutput { + return i.ToMySqlArrayOutputWithContext(context.Background()) +} + +func (i MySqlArray) ToMySqlArrayOutputWithContext(ctx context.Context) MySqlArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MySqlArrayOutput) +} + +// MySqlMapInput is an input type that accepts MySqlMap and MySqlMapOutput values. +// You can construct a concrete instance of `MySqlMapInput` via: +// +// MySqlMap{ "key": MySqlArgs{...} } +type MySqlMapInput interface { + pulumi.Input + + ToMySqlMapOutput() MySqlMapOutput + ToMySqlMapOutputWithContext(context.Context) MySqlMapOutput +} + +type MySqlMap map[string]MySqlInput + +func (MySqlMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MySql)(nil)).Elem() +} + +func (i MySqlMap) ToMySqlMapOutput() MySqlMapOutput { + return i.ToMySqlMapOutputWithContext(context.Background()) +} + +func (i MySqlMap) ToMySqlMapOutputWithContext(ctx context.Context) MySqlMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MySqlMapOutput) +} + +type MySqlOutput struct{ *pulumi.OutputState } + +func (MySqlOutput) ElementType() reflect.Type { + return reflect.TypeOf((**MySql)(nil)).Elem() +} + +func (o MySqlOutput) ToMySqlOutput() MySqlOutput { + return o +} + +func (o MySqlOutput) ToMySqlOutputWithContext(ctx context.Context) MySqlOutput { + return o +} + +// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. +func (o MySqlOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o MySqlOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +// Arguments appended to the container command. +func (o MySqlOutput) Args() pulumi.StringArrayOutput { + return o.ApplyT(func(v *MySql) pulumi.StringArrayOutput { return v.Args }).(pulumi.StringArrayOutput) +} + +// Override the container entrypoint command. +func (o MySqlOutput) Command() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.Command }).(pulumi.StringPtrOutput) +} + +// Hard CPU limit, for example `1`. +func (o MySqlOutput) CpuLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.CpuLimit }).(pulumi.StringPtrOutput) +} + +// Soft CPU reservation, for example `0.5`. +func (o MySqlOutput) CpuReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.CpuReservation }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the database was created. +func (o MySqlOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Name of the database to create. +func (o MySqlOutput) DatabaseName() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.DatabaseName }).(pulumi.StringOutput) +} + +// Password for the database user. +func (o MySqlOutput) DatabasePassword() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.DatabasePassword }).(pulumi.StringOutput) +} + +// Password for the MySQL `root` user. +func (o MySqlOutput) DatabaseRootPassword() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.DatabaseRootPassword }).(pulumi.StringOutput) +} + +// Database user to create. +func (o MySqlOutput) DatabaseUser() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.DatabaseUser }).(pulumi.StringOutput) +} + +// Free-form description. +func (o MySqlOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Detach the service from the shared `dokploy-network`. +func (o MySqlOutput) DetachDokployNetwork() pulumi.BoolOutput { + return o.ApplyT(func(v *MySql) pulumi.BoolOutput { return v.DetachDokployNetwork }).(pulumi.BoolOutput) +} + +// MySQL image to run, for example `mysql:8`. +func (o MySqlOutput) DockerImage() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.DockerImage }).(pulumi.StringOutput) +} + +// Docker Swarm endpoint specification, as a JSON object. +func (o MySqlOutput) EndpointSpecSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.EndpointSpecSwarm }).(pulumi.StringPtrOutput) +} + +// Environment variables in `KEY=value` format, one per line. +func (o MySqlOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this database belongs to. +func (o MySqlOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. +func (o MySqlOutput) ExternalPort() pulumi.IntPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.IntPtrOutput { return v.ExternalPort }).(pulumi.IntPtrOutput) +} + +// Docker Swarm health check configuration, as a JSON object. +func (o MySqlOutput) HealthCheckSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.HealthCheckSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service labels, as a JSON object. +func (o MySqlOutput) LabelsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.LabelsSwarm }).(pulumi.StringPtrOutput) +} + +// Hard memory limit, for example `512m`. +func (o MySqlOutput) MemoryLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.MemoryLimit }).(pulumi.StringPtrOutput) +} + +// Soft memory reservation, for example `256m`. +func (o MySqlOutput) MemoryReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.MemoryReservation }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service mode, as a JSON object. +func (o MySqlOutput) ModeSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.ModeSwarm }).(pulumi.StringPtrOutput) +} + +// Display name of the database. +func (o MySqlOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *MySql) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// IDs of additional Docker networks to attach. +func (o MySqlOutput) NetworkIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *MySql) pulumi.StringArrayOutput { return v.NetworkIds }).(pulumi.StringArrayOutput) +} + +// Docker Swarm network attachments, as a JSON array. +func (o MySqlOutput) NetworkSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.NetworkSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm placement constraints, as a JSON object. +func (o MySqlOutput) PlacementSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.PlacementSwarm }).(pulumi.StringPtrOutput) +} + +// Number of replicas to run. +func (o MySqlOutput) Replicas() pulumi.IntOutput { + return o.ApplyT(func(v *MySql) pulumi.IntOutput { return v.Replicas }).(pulumi.IntOutput) +} + +// Docker Swarm restart policy, as a JSON object. +func (o MySqlOutput) RestartPolicySwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.RestartPolicySwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rollback configuration, as a JSON object. +func (o MySqlOutput) RollbackConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.RollbackConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o MySqlOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Grace period in nanoseconds before a container is killed. +func (o MySqlOutput) StopGracePeriodSwarm() pulumi.IntPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.IntPtrOutput { return v.StopGracePeriodSwarm }).(pulumi.IntPtrOutput) +} + +// Docker Swarm ulimits, as a JSON object. +func (o MySqlOutput) UlimitsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.UlimitsSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rolling update configuration, as a JSON object. +func (o MySqlOutput) UpdateConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MySql) pulumi.StringPtrOutput { return v.UpdateConfigSwarm }).(pulumi.StringPtrOutput) +} + +type MySqlArrayOutput struct{ *pulumi.OutputState } + +func (MySqlArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MySql)(nil)).Elem() +} + +func (o MySqlArrayOutput) ToMySqlArrayOutput() MySqlArrayOutput { + return o +} + +func (o MySqlArrayOutput) ToMySqlArrayOutputWithContext(ctx context.Context) MySqlArrayOutput { + return o +} + +func (o MySqlArrayOutput) Index(i pulumi.IntInput) MySqlOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *MySql { + return vs[0].([]*MySql)[vs[1].(int)] + }).(MySqlOutput) +} + +type MySqlMapOutput struct{ *pulumi.OutputState } + +func (MySqlMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MySql)(nil)).Elem() +} + +func (o MySqlMapOutput) ToMySqlMapOutput() MySqlMapOutput { + return o +} + +func (o MySqlMapOutput) ToMySqlMapOutputWithContext(ctx context.Context) MySqlMapOutput { + return o +} + +func (o MySqlMapOutput) MapIndex(k pulumi.StringInput) MySqlOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *MySql { + return vs[0].(map[string]*MySql)[vs[1].(string)] + }).(MySqlOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MySqlInput)(nil)).Elem(), &MySql{}) + pulumi.RegisterInputType(reflect.TypeOf((*MySqlArrayInput)(nil)).Elem(), MySqlArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MySqlMapInput)(nil)).Elem(), MySqlMap{}) + pulumi.RegisterOutputType(MySqlOutput{}) + pulumi.RegisterOutputType(MySqlArrayOutput{}) + pulumi.RegisterOutputType(MySqlMapOutput{}) +} diff --git a/sdk/go/dokploy/port.go b/sdk/go/dokploy/port.go new file mode 100644 index 0000000..ff1fe5f --- /dev/null +++ b/sdk/go/dokploy/port.go @@ -0,0 +1,287 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Port struct { + pulumi.CustomResourceState + + // Application this port belongs to. + ApplicationId pulumi.StringOutput `pulumi:"applicationId"` + // Transport protocol. Valid values: `tcp`, `udp`. + Protocol pulumi.StringOutput `pulumi:"protocol"` + // Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + PublishMode pulumi.StringOutput `pulumi:"publishMode"` + // Port exposed on the host. + PublishedPort pulumi.IntOutput `pulumi:"publishedPort"` + // Port the container listens on. + TargetPort pulumi.IntOutput `pulumi:"targetPort"` +} + +// NewPort registers a new resource with the given unique name, arguments, and options. +func NewPort(ctx *pulumi.Context, + name string, args *PortArgs, opts ...pulumi.ResourceOption) (*Port, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ApplicationId == nil { + return nil, errors.New("invalid value for required argument 'ApplicationId'") + } + if args.Protocol == nil { + return nil, errors.New("invalid value for required argument 'Protocol'") + } + if args.PublishedPort == nil { + return nil, errors.New("invalid value for required argument 'PublishedPort'") + } + if args.TargetPort == nil { + return nil, errors.New("invalid value for required argument 'TargetPort'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Port + err := ctx.RegisterResource("dokploy:index/port:Port", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetPort gets an existing Port resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetPort(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *PortState, opts ...pulumi.ResourceOption) (*Port, error) { + var resource Port + err := ctx.ReadResource("dokploy:index/port:Port", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Port resources. +type portState struct { + // Application this port belongs to. + ApplicationId *string `pulumi:"applicationId"` + // Transport protocol. Valid values: `tcp`, `udp`. + Protocol *string `pulumi:"protocol"` + // Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + PublishMode *string `pulumi:"publishMode"` + // Port exposed on the host. + PublishedPort *int `pulumi:"publishedPort"` + // Port the container listens on. + TargetPort *int `pulumi:"targetPort"` +} + +type PortState struct { + // Application this port belongs to. + ApplicationId pulumi.StringPtrInput + // Transport protocol. Valid values: `tcp`, `udp`. + Protocol pulumi.StringPtrInput + // Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + PublishMode pulumi.StringPtrInput + // Port exposed on the host. + PublishedPort pulumi.IntPtrInput + // Port the container listens on. + TargetPort pulumi.IntPtrInput +} + +func (PortState) ElementType() reflect.Type { + return reflect.TypeOf((*portState)(nil)).Elem() +} + +type portArgs struct { + // Application this port belongs to. + ApplicationId string `pulumi:"applicationId"` + // Transport protocol. Valid values: `tcp`, `udp`. + Protocol string `pulumi:"protocol"` + // Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + PublishMode *string `pulumi:"publishMode"` + // Port exposed on the host. + PublishedPort int `pulumi:"publishedPort"` + // Port the container listens on. + TargetPort int `pulumi:"targetPort"` +} + +// The set of arguments for constructing a Port resource. +type PortArgs struct { + // Application this port belongs to. + ApplicationId pulumi.StringInput + // Transport protocol. Valid values: `tcp`, `udp`. + Protocol pulumi.StringInput + // Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + PublishMode pulumi.StringPtrInput + // Port exposed on the host. + PublishedPort pulumi.IntInput + // Port the container listens on. + TargetPort pulumi.IntInput +} + +func (PortArgs) ElementType() reflect.Type { + return reflect.TypeOf((*portArgs)(nil)).Elem() +} + +type PortInput interface { + pulumi.Input + + ToPortOutput() PortOutput + ToPortOutputWithContext(ctx context.Context) PortOutput +} + +func (*Port) ElementType() reflect.Type { + return reflect.TypeOf((**Port)(nil)).Elem() +} + +func (i *Port) ToPortOutput() PortOutput { + return i.ToPortOutputWithContext(context.Background()) +} + +func (i *Port) ToPortOutputWithContext(ctx context.Context) PortOutput { + return pulumi.ToOutputWithContext(ctx, i).(PortOutput) +} + +// PortArrayInput is an input type that accepts PortArray and PortArrayOutput values. +// You can construct a concrete instance of `PortArrayInput` via: +// +// PortArray{ PortArgs{...} } +type PortArrayInput interface { + pulumi.Input + + ToPortArrayOutput() PortArrayOutput + ToPortArrayOutputWithContext(context.Context) PortArrayOutput +} + +type PortArray []PortInput + +func (PortArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Port)(nil)).Elem() +} + +func (i PortArray) ToPortArrayOutput() PortArrayOutput { + return i.ToPortArrayOutputWithContext(context.Background()) +} + +func (i PortArray) ToPortArrayOutputWithContext(ctx context.Context) PortArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(PortArrayOutput) +} + +// PortMapInput is an input type that accepts PortMap and PortMapOutput values. +// You can construct a concrete instance of `PortMapInput` via: +// +// PortMap{ "key": PortArgs{...} } +type PortMapInput interface { + pulumi.Input + + ToPortMapOutput() PortMapOutput + ToPortMapOutputWithContext(context.Context) PortMapOutput +} + +type PortMap map[string]PortInput + +func (PortMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Port)(nil)).Elem() +} + +func (i PortMap) ToPortMapOutput() PortMapOutput { + return i.ToPortMapOutputWithContext(context.Background()) +} + +func (i PortMap) ToPortMapOutputWithContext(ctx context.Context) PortMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(PortMapOutput) +} + +type PortOutput struct{ *pulumi.OutputState } + +func (PortOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Port)(nil)).Elem() +} + +func (o PortOutput) ToPortOutput() PortOutput { + return o +} + +func (o PortOutput) ToPortOutputWithContext(ctx context.Context) PortOutput { + return o +} + +// Application this port belongs to. +func (o PortOutput) ApplicationId() pulumi.StringOutput { + return o.ApplyT(func(v *Port) pulumi.StringOutput { return v.ApplicationId }).(pulumi.StringOutput) +} + +// Transport protocol. Valid values: `tcp`, `udp`. +func (o PortOutput) Protocol() pulumi.StringOutput { + return o.ApplyT(func(v *Port) pulumi.StringOutput { return v.Protocol }).(pulumi.StringOutput) +} + +// Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. +func (o PortOutput) PublishMode() pulumi.StringOutput { + return o.ApplyT(func(v *Port) pulumi.StringOutput { return v.PublishMode }).(pulumi.StringOutput) +} + +// Port exposed on the host. +func (o PortOutput) PublishedPort() pulumi.IntOutput { + return o.ApplyT(func(v *Port) pulumi.IntOutput { return v.PublishedPort }).(pulumi.IntOutput) +} + +// Port the container listens on. +func (o PortOutput) TargetPort() pulumi.IntOutput { + return o.ApplyT(func(v *Port) pulumi.IntOutput { return v.TargetPort }).(pulumi.IntOutput) +} + +type PortArrayOutput struct{ *pulumi.OutputState } + +func (PortArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Port)(nil)).Elem() +} + +func (o PortArrayOutput) ToPortArrayOutput() PortArrayOutput { + return o +} + +func (o PortArrayOutput) ToPortArrayOutputWithContext(ctx context.Context) PortArrayOutput { + return o +} + +func (o PortArrayOutput) Index(i pulumi.IntInput) PortOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Port { + return vs[0].([]*Port)[vs[1].(int)] + }).(PortOutput) +} + +type PortMapOutput struct{ *pulumi.OutputState } + +func (PortMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Port)(nil)).Elem() +} + +func (o PortMapOutput) ToPortMapOutput() PortMapOutput { + return o +} + +func (o PortMapOutput) ToPortMapOutputWithContext(ctx context.Context) PortMapOutput { + return o +} + +func (o PortMapOutput) MapIndex(k pulumi.StringInput) PortOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Port { + return vs[0].(map[string]*Port)[vs[1].(string)] + }).(PortOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*PortInput)(nil)).Elem(), &Port{}) + pulumi.RegisterInputType(reflect.TypeOf((*PortArrayInput)(nil)).Elem(), PortArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*PortMapInput)(nil)).Elem(), PortMap{}) + pulumi.RegisterOutputType(PortOutput{}) + pulumi.RegisterOutputType(PortArrayOutput{}) + pulumi.RegisterOutputType(PortMapOutput{}) +} diff --git a/sdk/go/dokploy/postgres.go b/sdk/go/dokploy/postgres.go new file mode 100644 index 0000000..d8bfa6c --- /dev/null +++ b/sdk/go/dokploy/postgres.go @@ -0,0 +1,709 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Postgres struct { + pulumi.CustomResourceState + + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringOutput `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringOutput `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args pulumi.StringArrayOutput `pulumi:"args"` + // Override the container entrypoint command. + Command pulumi.StringPtrOutput `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrOutput `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrOutput `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Name of the database to create. + DatabaseName pulumi.StringOutput `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword pulumi.StringOutput `pulumi:"databasePassword"` + // Database user to create. + DatabaseUser pulumi.StringOutput `pulumi:"databaseUser"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolOutput `pulumi:"detachDokployNetwork"` + // PostgreSQL image to run, for example `postgres:16`. + DockerImage pulumi.StringOutput `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrOutput `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrOutput `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrOutput `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrOutput `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrOutput `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrOutput `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrOutput `pulumi:"modeSwarm"` + // Display name of the database. + Name pulumi.StringOutput `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayOutput `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrOutput `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrOutput `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas pulumi.IntOutput `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrOutput `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrOutput `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrOutput `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrOutput `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrOutput `pulumi:"updateConfigSwarm"` +} + +// NewPostgres registers a new resource with the given unique name, arguments, and options. +func NewPostgres(ctx *pulumi.Context, + name string, args *PostgresArgs, opts ...pulumi.ResourceOption) (*Postgres, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DatabaseName == nil { + return nil, errors.New("invalid value for required argument 'DatabaseName'") + } + if args.DatabasePassword == nil { + return nil, errors.New("invalid value for required argument 'DatabasePassword'") + } + if args.DatabaseUser == nil { + return nil, errors.New("invalid value for required argument 'DatabaseUser'") + } + if args.DockerImage == nil { + return nil, errors.New("invalid value for required argument 'DockerImage'") + } + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + if args.DatabasePassword != nil { + args.DatabasePassword = pulumi.ToSecret(args.DatabasePassword).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "databasePassword", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Postgres + err := ctx.RegisterResource("dokploy:index/postgres:Postgres", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetPostgres gets an existing Postgres resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetPostgres(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *PostgresState, opts ...pulumi.ResourceOption) (*Postgres, error) { + var resource Postgres + err := ctx.ReadResource("dokploy:index/postgres:Postgres", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Postgres resources. +type postgresState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus *string `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt *string `pulumi:"createdAt"` + // Name of the database to create. + DatabaseName *string `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword *string `pulumi:"databasePassword"` + // Database user to create. + DatabaseUser *string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // PostgreSQL image to run, for example `postgres:16`. + DockerImage *string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +type PostgresState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringPtrInput + // Name of the database to create. + DatabaseName pulumi.StringPtrInput + // Password for the database user. + DatabasePassword pulumi.StringPtrInput + // Database user to create. + DatabaseUser pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // PostgreSQL image to run, for example `postgres:16`. + DockerImage pulumi.StringPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringPtrInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (PostgresState) ElementType() reflect.Type { + return reflect.TypeOf((*postgresState)(nil)).Elem() +} + +type postgresArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Name of the database to create. + DatabaseName string `pulumi:"databaseName"` + // Password for the database user. + DatabasePassword string `pulumi:"databasePassword"` + // Database user to create. + DatabaseUser string `pulumi:"databaseUser"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // PostgreSQL image to run, for example `postgres:16`. + DockerImage string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +// The set of arguments for constructing a Postgres resource. +type PostgresArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Name of the database to create. + DatabaseName pulumi.StringInput + // Password for the database user. + DatabasePassword pulumi.StringInput + // Database user to create. + DatabaseUser pulumi.StringInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // PostgreSQL image to run, for example `postgres:16`. + DockerImage pulumi.StringInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (PostgresArgs) ElementType() reflect.Type { + return reflect.TypeOf((*postgresArgs)(nil)).Elem() +} + +type PostgresInput interface { + pulumi.Input + + ToPostgresOutput() PostgresOutput + ToPostgresOutputWithContext(ctx context.Context) PostgresOutput +} + +func (*Postgres) ElementType() reflect.Type { + return reflect.TypeOf((**Postgres)(nil)).Elem() +} + +func (i *Postgres) ToPostgresOutput() PostgresOutput { + return i.ToPostgresOutputWithContext(context.Background()) +} + +func (i *Postgres) ToPostgresOutputWithContext(ctx context.Context) PostgresOutput { + return pulumi.ToOutputWithContext(ctx, i).(PostgresOutput) +} + +// PostgresArrayInput is an input type that accepts PostgresArray and PostgresArrayOutput values. +// You can construct a concrete instance of `PostgresArrayInput` via: +// +// PostgresArray{ PostgresArgs{...} } +type PostgresArrayInput interface { + pulumi.Input + + ToPostgresArrayOutput() PostgresArrayOutput + ToPostgresArrayOutputWithContext(context.Context) PostgresArrayOutput +} + +type PostgresArray []PostgresInput + +func (PostgresArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Postgres)(nil)).Elem() +} + +func (i PostgresArray) ToPostgresArrayOutput() PostgresArrayOutput { + return i.ToPostgresArrayOutputWithContext(context.Background()) +} + +func (i PostgresArray) ToPostgresArrayOutputWithContext(ctx context.Context) PostgresArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(PostgresArrayOutput) +} + +// PostgresMapInput is an input type that accepts PostgresMap and PostgresMapOutput values. +// You can construct a concrete instance of `PostgresMapInput` via: +// +// PostgresMap{ "key": PostgresArgs{...} } +type PostgresMapInput interface { + pulumi.Input + + ToPostgresMapOutput() PostgresMapOutput + ToPostgresMapOutputWithContext(context.Context) PostgresMapOutput +} + +type PostgresMap map[string]PostgresInput + +func (PostgresMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Postgres)(nil)).Elem() +} + +func (i PostgresMap) ToPostgresMapOutput() PostgresMapOutput { + return i.ToPostgresMapOutputWithContext(context.Background()) +} + +func (i PostgresMap) ToPostgresMapOutputWithContext(ctx context.Context) PostgresMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(PostgresMapOutput) +} + +type PostgresOutput struct{ *pulumi.OutputState } + +func (PostgresOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Postgres)(nil)).Elem() +} + +func (o PostgresOutput) ToPostgresOutput() PostgresOutput { + return o +} + +func (o PostgresOutput) ToPostgresOutputWithContext(ctx context.Context) PostgresOutput { + return o +} + +// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. +func (o PostgresOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o PostgresOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +// Arguments appended to the container command. +func (o PostgresOutput) Args() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringArrayOutput { return v.Args }).(pulumi.StringArrayOutput) +} + +// Override the container entrypoint command. +func (o PostgresOutput) Command() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.Command }).(pulumi.StringPtrOutput) +} + +// Hard CPU limit, for example `1`. +func (o PostgresOutput) CpuLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.CpuLimit }).(pulumi.StringPtrOutput) +} + +// Soft CPU reservation, for example `0.5`. +func (o PostgresOutput) CpuReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.CpuReservation }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the database was created. +func (o PostgresOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Name of the database to create. +func (o PostgresOutput) DatabaseName() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.DatabaseName }).(pulumi.StringOutput) +} + +// Password for the database user. +func (o PostgresOutput) DatabasePassword() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.DatabasePassword }).(pulumi.StringOutput) +} + +// Database user to create. +func (o PostgresOutput) DatabaseUser() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.DatabaseUser }).(pulumi.StringOutput) +} + +// Free-form description. +func (o PostgresOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Detach the service from the shared `dokploy-network`. +func (o PostgresOutput) DetachDokployNetwork() pulumi.BoolOutput { + return o.ApplyT(func(v *Postgres) pulumi.BoolOutput { return v.DetachDokployNetwork }).(pulumi.BoolOutput) +} + +// PostgreSQL image to run, for example `postgres:16`. +func (o PostgresOutput) DockerImage() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.DockerImage }).(pulumi.StringOutput) +} + +// Docker Swarm endpoint specification, as a JSON object. +func (o PostgresOutput) EndpointSpecSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.EndpointSpecSwarm }).(pulumi.StringPtrOutput) +} + +// Environment variables in `KEY=value` format, one per line. +func (o PostgresOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this database belongs to. +func (o PostgresOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. +func (o PostgresOutput) ExternalPort() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.IntPtrOutput { return v.ExternalPort }).(pulumi.IntPtrOutput) +} + +// Docker Swarm health check configuration, as a JSON object. +func (o PostgresOutput) HealthCheckSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.HealthCheckSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service labels, as a JSON object. +func (o PostgresOutput) LabelsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.LabelsSwarm }).(pulumi.StringPtrOutput) +} + +// Hard memory limit, for example `512m`. +func (o PostgresOutput) MemoryLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.MemoryLimit }).(pulumi.StringPtrOutput) +} + +// Soft memory reservation, for example `256m`. +func (o PostgresOutput) MemoryReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.MemoryReservation }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service mode, as a JSON object. +func (o PostgresOutput) ModeSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.ModeSwarm }).(pulumi.StringPtrOutput) +} + +// Display name of the database. +func (o PostgresOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// IDs of additional Docker networks to attach. +func (o PostgresOutput) NetworkIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringArrayOutput { return v.NetworkIds }).(pulumi.StringArrayOutput) +} + +// Docker Swarm network attachments, as a JSON array. +func (o PostgresOutput) NetworkSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.NetworkSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm placement constraints, as a JSON object. +func (o PostgresOutput) PlacementSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.PlacementSwarm }).(pulumi.StringPtrOutput) +} + +// Number of replicas to run. +func (o PostgresOutput) Replicas() pulumi.IntOutput { + return o.ApplyT(func(v *Postgres) pulumi.IntOutput { return v.Replicas }).(pulumi.IntOutput) +} + +// Docker Swarm restart policy, as a JSON object. +func (o PostgresOutput) RestartPolicySwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.RestartPolicySwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rollback configuration, as a JSON object. +func (o PostgresOutput) RollbackConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.RollbackConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o PostgresOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Grace period in nanoseconds before a container is killed. +func (o PostgresOutput) StopGracePeriodSwarm() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.IntPtrOutput { return v.StopGracePeriodSwarm }).(pulumi.IntPtrOutput) +} + +// Docker Swarm ulimits, as a JSON object. +func (o PostgresOutput) UlimitsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.UlimitsSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rolling update configuration, as a JSON object. +func (o PostgresOutput) UpdateConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Postgres) pulumi.StringPtrOutput { return v.UpdateConfigSwarm }).(pulumi.StringPtrOutput) +} + +type PostgresArrayOutput struct{ *pulumi.OutputState } + +func (PostgresArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Postgres)(nil)).Elem() +} + +func (o PostgresArrayOutput) ToPostgresArrayOutput() PostgresArrayOutput { + return o +} + +func (o PostgresArrayOutput) ToPostgresArrayOutputWithContext(ctx context.Context) PostgresArrayOutput { + return o +} + +func (o PostgresArrayOutput) Index(i pulumi.IntInput) PostgresOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Postgres { + return vs[0].([]*Postgres)[vs[1].(int)] + }).(PostgresOutput) +} + +type PostgresMapOutput struct{ *pulumi.OutputState } + +func (PostgresMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Postgres)(nil)).Elem() +} + +func (o PostgresMapOutput) ToPostgresMapOutput() PostgresMapOutput { + return o +} + +func (o PostgresMapOutput) ToPostgresMapOutputWithContext(ctx context.Context) PostgresMapOutput { + return o +} + +func (o PostgresMapOutput) MapIndex(k pulumi.StringInput) PostgresOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Postgres { + return vs[0].(map[string]*Postgres)[vs[1].(string)] + }).(PostgresOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*PostgresInput)(nil)).Elem(), &Postgres{}) + pulumi.RegisterInputType(reflect.TypeOf((*PostgresArrayInput)(nil)).Elem(), PostgresArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*PostgresMapInput)(nil)).Elem(), PostgresMap{}) + pulumi.RegisterOutputType(PostgresOutput{}) + pulumi.RegisterOutputType(PostgresArrayOutput{}) + pulumi.RegisterOutputType(PostgresMapOutput{}) +} diff --git a/sdk/go/dokploy/project.go b/sdk/go/dokploy/project.go new file mode 100644 index 0000000..e380add --- /dev/null +++ b/sdk/go/dokploy/project.go @@ -0,0 +1,277 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Project struct { + pulumi.CustomResourceState + + // RFC 3339 timestamp of when the project was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // ID of the `production` environment that Dokploy creates automatically with the project. + DefaultEnvironmentId pulumi.StringOutput `pulumi:"defaultEnvironmentId"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + Env pulumi.StringOutput `pulumi:"env"` + // Display name of the project. + Name pulumi.StringOutput `pulumi:"name"` + // Organization that owns the project. + OrganizationId pulumi.StringOutput `pulumi:"organizationId"` +} + +// NewProject registers a new resource with the given unique name, arguments, and options. +func NewProject(ctx *pulumi.Context, + name string, args *ProjectArgs, opts ...pulumi.ResourceOption) (*Project, error) { + if args == nil { + args = &ProjectArgs{} + } + + opts = internal.PkgResourceDefaultOpts(opts) + var resource Project + err := ctx.RegisterResource("dokploy:index/project:Project", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetProject gets an existing Project resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetProject(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ProjectState, opts ...pulumi.ResourceOption) (*Project, error) { + var resource Project + err := ctx.ReadResource("dokploy:index/project:Project", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Project resources. +type projectState struct { + // RFC 3339 timestamp of when the project was created. + CreatedAt *string `pulumi:"createdAt"` + // ID of the `production` environment that Dokploy creates automatically with the project. + DefaultEnvironmentId *string `pulumi:"defaultEnvironmentId"` + // Free-form description. + Description *string `pulumi:"description"` + // Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + Env *string `pulumi:"env"` + // Display name of the project. + Name *string `pulumi:"name"` + // Organization that owns the project. + OrganizationId *string `pulumi:"organizationId"` +} + +type ProjectState struct { + // RFC 3339 timestamp of when the project was created. + CreatedAt pulumi.StringPtrInput + // ID of the `production` environment that Dokploy creates automatically with the project. + DefaultEnvironmentId pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + Env pulumi.StringPtrInput + // Display name of the project. + Name pulumi.StringPtrInput + // Organization that owns the project. + OrganizationId pulumi.StringPtrInput +} + +func (ProjectState) ElementType() reflect.Type { + return reflect.TypeOf((*projectState)(nil)).Elem() +} + +type projectArgs struct { + // Free-form description. + Description *string `pulumi:"description"` + // Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + Env *string `pulumi:"env"` + // Display name of the project. + Name *string `pulumi:"name"` +} + +// The set of arguments for constructing a Project resource. +type ProjectArgs struct { + // Free-form description. + Description pulumi.StringPtrInput + // Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + Env pulumi.StringPtrInput + // Display name of the project. + Name pulumi.StringPtrInput +} + +func (ProjectArgs) ElementType() reflect.Type { + return reflect.TypeOf((*projectArgs)(nil)).Elem() +} + +type ProjectInput interface { + pulumi.Input + + ToProjectOutput() ProjectOutput + ToProjectOutputWithContext(ctx context.Context) ProjectOutput +} + +func (*Project) ElementType() reflect.Type { + return reflect.TypeOf((**Project)(nil)).Elem() +} + +func (i *Project) ToProjectOutput() ProjectOutput { + return i.ToProjectOutputWithContext(context.Background()) +} + +func (i *Project) ToProjectOutputWithContext(ctx context.Context) ProjectOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectOutput) +} + +// ProjectArrayInput is an input type that accepts ProjectArray and ProjectArrayOutput values. +// You can construct a concrete instance of `ProjectArrayInput` via: +// +// ProjectArray{ ProjectArgs{...} } +type ProjectArrayInput interface { + pulumi.Input + + ToProjectArrayOutput() ProjectArrayOutput + ToProjectArrayOutputWithContext(context.Context) ProjectArrayOutput +} + +type ProjectArray []ProjectInput + +func (ProjectArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Project)(nil)).Elem() +} + +func (i ProjectArray) ToProjectArrayOutput() ProjectArrayOutput { + return i.ToProjectArrayOutputWithContext(context.Background()) +} + +func (i ProjectArray) ToProjectArrayOutputWithContext(ctx context.Context) ProjectArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectArrayOutput) +} + +// ProjectMapInput is an input type that accepts ProjectMap and ProjectMapOutput values. +// You can construct a concrete instance of `ProjectMapInput` via: +// +// ProjectMap{ "key": ProjectArgs{...} } +type ProjectMapInput interface { + pulumi.Input + + ToProjectMapOutput() ProjectMapOutput + ToProjectMapOutputWithContext(context.Context) ProjectMapOutput +} + +type ProjectMap map[string]ProjectInput + +func (ProjectMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Project)(nil)).Elem() +} + +func (i ProjectMap) ToProjectMapOutput() ProjectMapOutput { + return i.ToProjectMapOutputWithContext(context.Background()) +} + +func (i ProjectMap) ToProjectMapOutputWithContext(ctx context.Context) ProjectMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectMapOutput) +} + +type ProjectOutput struct{ *pulumi.OutputState } + +func (ProjectOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Project)(nil)).Elem() +} + +func (o ProjectOutput) ToProjectOutput() ProjectOutput { + return o +} + +func (o ProjectOutput) ToProjectOutputWithContext(ctx context.Context) ProjectOutput { + return o +} + +// RFC 3339 timestamp of when the project was created. +func (o ProjectOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Project) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// ID of the `production` environment that Dokploy creates automatically with the project. +func (o ProjectOutput) DefaultEnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *Project) pulumi.StringOutput { return v.DefaultEnvironmentId }).(pulumi.StringOutput) +} + +// Free-form description. +func (o ProjectOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Project) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. +func (o ProjectOutput) Env() pulumi.StringOutput { + return o.ApplyT(func(v *Project) pulumi.StringOutput { return v.Env }).(pulumi.StringOutput) +} + +// Display name of the project. +func (o ProjectOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Project) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Organization that owns the project. +func (o ProjectOutput) OrganizationId() pulumi.StringOutput { + return o.ApplyT(func(v *Project) pulumi.StringOutput { return v.OrganizationId }).(pulumi.StringOutput) +} + +type ProjectArrayOutput struct{ *pulumi.OutputState } + +func (ProjectArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Project)(nil)).Elem() +} + +func (o ProjectArrayOutput) ToProjectArrayOutput() ProjectArrayOutput { + return o +} + +func (o ProjectArrayOutput) ToProjectArrayOutputWithContext(ctx context.Context) ProjectArrayOutput { + return o +} + +func (o ProjectArrayOutput) Index(i pulumi.IntInput) ProjectOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Project { + return vs[0].([]*Project)[vs[1].(int)] + }).(ProjectOutput) +} + +type ProjectMapOutput struct{ *pulumi.OutputState } + +func (ProjectMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Project)(nil)).Elem() +} + +func (o ProjectMapOutput) ToProjectMapOutput() ProjectMapOutput { + return o +} + +func (o ProjectMapOutput) ToProjectMapOutputWithContext(ctx context.Context) ProjectMapOutput { + return o +} + +func (o ProjectMapOutput) MapIndex(k pulumi.StringInput) ProjectOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Project { + return vs[0].(map[string]*Project)[vs[1].(string)] + }).(ProjectOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProjectInput)(nil)).Elem(), &Project{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectArrayInput)(nil)).Elem(), ProjectArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectMapInput)(nil)).Elem(), ProjectMap{}) + pulumi.RegisterOutputType(ProjectOutput{}) + pulumi.RegisterOutputType(ProjectArrayOutput{}) + pulumi.RegisterOutputType(ProjectMapOutput{}) +} diff --git a/sdk/go/dokploy/provider.go b/sdk/go/dokploy/provider.go new file mode 100644 index 0000000..5064acf --- /dev/null +++ b/sdk/go/dokploy/provider.go @@ -0,0 +1,162 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// The provider type for the dokploy package. By default, resources use package-wide configuration +// settings, however an explicit `Provider` instance may be created and passed during resource +// construction to achieve fine-grained programmatic control over provider settings. See the +// [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. +type Provider struct { + pulumi.ProviderResourceState + + // API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + ApiKey pulumi.StringPtrOutput `pulumi:"apiKey"` + // Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + Host pulumi.StringPtrOutput `pulumi:"host"` +} + +// NewProvider registers a new resource with the given unique name, arguments, and options. +func NewProvider(ctx *pulumi.Context, + name string, args *ProviderArgs, opts ...pulumi.ResourceOption) (*Provider, error) { + if args == nil { + args = &ProviderArgs{} + } + + if args.ApiKey == nil { + if d := internal.GetEnvOrDefault(nil, nil, "DOKPLOY_API_KEY"); d != nil { + args.ApiKey = pulumi.StringPtr(d.(string)) + } + } + if args.Host == nil { + if d := internal.GetEnvOrDefault(nil, nil, "DOKPLOY_HOST"); d != nil { + args.Host = pulumi.StringPtr(d.(string)) + } + } + if args.TimeoutSeconds == nil { + if d := internal.GetEnvOrDefault(nil, internal.ParseEnvInt, "DOKPLOY_TIMEOUT_SECONDS"); d != nil { + args.TimeoutSeconds = pulumi.IntPtr(d.(int)) + } + } + if args.ApiKey != nil { + args.ApiKey = pulumi.ToSecret(args.ApiKey).(pulumi.StringPtrInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "apiKey", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Provider + err := ctx.RegisterResource("pulumi:providers:dokploy", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +type providerArgs struct { + // API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + ApiKey *string `pulumi:"apiKey"` + // Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + Host *string `pulumi:"host"` + // Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + InsecureSkipVerify *bool `pulumi:"insecureSkipVerify"` + // Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + TimeoutSeconds *int `pulumi:"timeoutSeconds"` +} + +// The set of arguments for constructing a Provider resource. +type ProviderArgs struct { + // API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + ApiKey pulumi.StringPtrInput + // Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + Host pulumi.StringPtrInput + // Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + InsecureSkipVerify pulumi.BoolPtrInput + // Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + TimeoutSeconds pulumi.IntPtrInput +} + +func (ProviderArgs) ElementType() reflect.Type { + return reflect.TypeOf((*providerArgs)(nil)).Elem() +} + +// This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider. +func (r *Provider) TerraformConfig(ctx *pulumi.Context) (ProviderTerraformConfigResultOutput, error) { + out, err := ctx.Call("pulumi:providers:dokploy/terraformConfig", nil, ProviderTerraformConfigResultOutput{}, r) + if err != nil { + return ProviderTerraformConfigResultOutput{}, err + } + return out.(ProviderTerraformConfigResultOutput), nil +} + +type ProviderTerraformConfigResult struct { + Result map[string]interface{} `pulumi:"result"` +} + +type ProviderTerraformConfigResultOutput struct{ *pulumi.OutputState } + +func (ProviderTerraformConfigResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ProviderTerraformConfigResult)(nil)).Elem() +} + +func (o ProviderTerraformConfigResultOutput) Result() pulumi.MapOutput { + return o.ApplyT(func(v ProviderTerraformConfigResult) map[string]interface{} { return v.Result }).(pulumi.MapOutput) +} + +type ProviderInput interface { + pulumi.Input + + ToProviderOutput() ProviderOutput + ToProviderOutputWithContext(ctx context.Context) ProviderOutput +} + +func (*Provider) ElementType() reflect.Type { + return reflect.TypeOf((**Provider)(nil)).Elem() +} + +func (i *Provider) ToProviderOutput() ProviderOutput { + return i.ToProviderOutputWithContext(context.Background()) +} + +func (i *Provider) ToProviderOutputWithContext(ctx context.Context) ProviderOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProviderOutput) +} + +type ProviderOutput struct{ *pulumi.OutputState } + +func (ProviderOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Provider)(nil)).Elem() +} + +func (o ProviderOutput) ToProviderOutput() ProviderOutput { + return o +} + +func (o ProviderOutput) ToProviderOutputWithContext(ctx context.Context) ProviderOutput { + return o +} + +// API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. +func (o ProviderOutput) ApiKey() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ApiKey }).(pulumi.StringPtrOutput) +} + +// Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. +func (o ProviderOutput) Host() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Host }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProviderInput)(nil)).Elem(), &Provider{}) + pulumi.RegisterOutputType(ProviderOutput{}) + pulumi.RegisterOutputType(ProviderTerraformConfigResultOutput{}) +} diff --git a/sdk/go/dokploy/pulumi-plugin.json b/sdk/go/dokploy/pulumi-plugin.json new file mode 100644 index 0000000..367f36a --- /dev/null +++ b/sdk/go/dokploy/pulumi-plugin.json @@ -0,0 +1,6 @@ +{ + "resource": true, + "name": "dokploy", + "version": "0.1.0", + "server": "github://api.github.com/maxvojtkov/pulumi-dokploy" +} diff --git a/sdk/go/dokploy/pulumiTypes.go b/sdk/go/dokploy/pulumiTypes.go new file mode 100644 index 0000000..f5f8b87 --- /dev/null +++ b/sdk/go/dokploy/pulumiTypes.go @@ -0,0 +1,359 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +var _ = internal.GetEnvOrDefault + +type GetProjectEnvironment struct { + Id string `pulumi:"id"` + IsDefault bool `pulumi:"isDefault"` + Name string `pulumi:"name"` +} + +// GetProjectEnvironmentInput is an input type that accepts GetProjectEnvironmentArgs and GetProjectEnvironmentOutput values. +// You can construct a concrete instance of `GetProjectEnvironmentInput` via: +// +// GetProjectEnvironmentArgs{...} +type GetProjectEnvironmentInput interface { + pulumi.Input + + ToGetProjectEnvironmentOutput() GetProjectEnvironmentOutput + ToGetProjectEnvironmentOutputWithContext(context.Context) GetProjectEnvironmentOutput +} + +type GetProjectEnvironmentArgs struct { + Id pulumi.StringInput `pulumi:"id"` + IsDefault pulumi.BoolInput `pulumi:"isDefault"` + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetProjectEnvironmentArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetProjectEnvironment)(nil)).Elem() +} + +func (i GetProjectEnvironmentArgs) ToGetProjectEnvironmentOutput() GetProjectEnvironmentOutput { + return i.ToGetProjectEnvironmentOutputWithContext(context.Background()) +} + +func (i GetProjectEnvironmentArgs) ToGetProjectEnvironmentOutputWithContext(ctx context.Context) GetProjectEnvironmentOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetProjectEnvironmentOutput) +} + +// GetProjectEnvironmentArrayInput is an input type that accepts GetProjectEnvironmentArray and GetProjectEnvironmentArrayOutput values. +// You can construct a concrete instance of `GetProjectEnvironmentArrayInput` via: +// +// GetProjectEnvironmentArray{ GetProjectEnvironmentArgs{...} } +type GetProjectEnvironmentArrayInput interface { + pulumi.Input + + ToGetProjectEnvironmentArrayOutput() GetProjectEnvironmentArrayOutput + ToGetProjectEnvironmentArrayOutputWithContext(context.Context) GetProjectEnvironmentArrayOutput +} + +type GetProjectEnvironmentArray []GetProjectEnvironmentInput + +func (GetProjectEnvironmentArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetProjectEnvironment)(nil)).Elem() +} + +func (i GetProjectEnvironmentArray) ToGetProjectEnvironmentArrayOutput() GetProjectEnvironmentArrayOutput { + return i.ToGetProjectEnvironmentArrayOutputWithContext(context.Background()) +} + +func (i GetProjectEnvironmentArray) ToGetProjectEnvironmentArrayOutputWithContext(ctx context.Context) GetProjectEnvironmentArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetProjectEnvironmentArrayOutput) +} + +type GetProjectEnvironmentOutput struct{ *pulumi.OutputState } + +func (GetProjectEnvironmentOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetProjectEnvironment)(nil)).Elem() +} + +func (o GetProjectEnvironmentOutput) ToGetProjectEnvironmentOutput() GetProjectEnvironmentOutput { + return o +} + +func (o GetProjectEnvironmentOutput) ToGetProjectEnvironmentOutputWithContext(ctx context.Context) GetProjectEnvironmentOutput { + return o +} + +func (o GetProjectEnvironmentOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetProjectEnvironment) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetProjectEnvironmentOutput) IsDefault() pulumi.BoolOutput { + return o.ApplyT(func(v GetProjectEnvironment) bool { return v.IsDefault }).(pulumi.BoolOutput) +} + +func (o GetProjectEnvironmentOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetProjectEnvironment) string { return v.Name }).(pulumi.StringOutput) +} + +type GetProjectEnvironmentArrayOutput struct{ *pulumi.OutputState } + +func (GetProjectEnvironmentArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetProjectEnvironment)(nil)).Elem() +} + +func (o GetProjectEnvironmentArrayOutput) ToGetProjectEnvironmentArrayOutput() GetProjectEnvironmentArrayOutput { + return o +} + +func (o GetProjectEnvironmentArrayOutput) ToGetProjectEnvironmentArrayOutputWithContext(ctx context.Context) GetProjectEnvironmentArrayOutput { + return o +} + +func (o GetProjectEnvironmentArrayOutput) Index(i pulumi.IntInput) GetProjectEnvironmentOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetProjectEnvironment { + return vs[0].([]GetProjectEnvironment)[vs[1].(int)] + }).(GetProjectEnvironmentOutput) +} + +type GetProjectsProject struct { + DefaultEnvironmentId string `pulumi:"defaultEnvironmentId"` + Description string `pulumi:"description"` + Id string `pulumi:"id"` + Name string `pulumi:"name"` +} + +// GetProjectsProjectInput is an input type that accepts GetProjectsProjectArgs and GetProjectsProjectOutput values. +// You can construct a concrete instance of `GetProjectsProjectInput` via: +// +// GetProjectsProjectArgs{...} +type GetProjectsProjectInput interface { + pulumi.Input + + ToGetProjectsProjectOutput() GetProjectsProjectOutput + ToGetProjectsProjectOutputWithContext(context.Context) GetProjectsProjectOutput +} + +type GetProjectsProjectArgs struct { + DefaultEnvironmentId pulumi.StringInput `pulumi:"defaultEnvironmentId"` + Description pulumi.StringInput `pulumi:"description"` + Id pulumi.StringInput `pulumi:"id"` + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetProjectsProjectArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetProjectsProject)(nil)).Elem() +} + +func (i GetProjectsProjectArgs) ToGetProjectsProjectOutput() GetProjectsProjectOutput { + return i.ToGetProjectsProjectOutputWithContext(context.Background()) +} + +func (i GetProjectsProjectArgs) ToGetProjectsProjectOutputWithContext(ctx context.Context) GetProjectsProjectOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetProjectsProjectOutput) +} + +// GetProjectsProjectArrayInput is an input type that accepts GetProjectsProjectArray and GetProjectsProjectArrayOutput values. +// You can construct a concrete instance of `GetProjectsProjectArrayInput` via: +// +// GetProjectsProjectArray{ GetProjectsProjectArgs{...} } +type GetProjectsProjectArrayInput interface { + pulumi.Input + + ToGetProjectsProjectArrayOutput() GetProjectsProjectArrayOutput + ToGetProjectsProjectArrayOutputWithContext(context.Context) GetProjectsProjectArrayOutput +} + +type GetProjectsProjectArray []GetProjectsProjectInput + +func (GetProjectsProjectArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetProjectsProject)(nil)).Elem() +} + +func (i GetProjectsProjectArray) ToGetProjectsProjectArrayOutput() GetProjectsProjectArrayOutput { + return i.ToGetProjectsProjectArrayOutputWithContext(context.Background()) +} + +func (i GetProjectsProjectArray) ToGetProjectsProjectArrayOutputWithContext(ctx context.Context) GetProjectsProjectArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetProjectsProjectArrayOutput) +} + +type GetProjectsProjectOutput struct{ *pulumi.OutputState } + +func (GetProjectsProjectOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetProjectsProject)(nil)).Elem() +} + +func (o GetProjectsProjectOutput) ToGetProjectsProjectOutput() GetProjectsProjectOutput { + return o +} + +func (o GetProjectsProjectOutput) ToGetProjectsProjectOutputWithContext(ctx context.Context) GetProjectsProjectOutput { + return o +} + +func (o GetProjectsProjectOutput) DefaultEnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v GetProjectsProject) string { return v.DefaultEnvironmentId }).(pulumi.StringOutput) +} + +func (o GetProjectsProjectOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v GetProjectsProject) string { return v.Description }).(pulumi.StringOutput) +} + +func (o GetProjectsProjectOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetProjectsProject) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetProjectsProjectOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetProjectsProject) string { return v.Name }).(pulumi.StringOutput) +} + +type GetProjectsProjectArrayOutput struct{ *pulumi.OutputState } + +func (GetProjectsProjectArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetProjectsProject)(nil)).Elem() +} + +func (o GetProjectsProjectArrayOutput) ToGetProjectsProjectArrayOutput() GetProjectsProjectArrayOutput { + return o +} + +func (o GetProjectsProjectArrayOutput) ToGetProjectsProjectArrayOutputWithContext(ctx context.Context) GetProjectsProjectArrayOutput { + return o +} + +func (o GetProjectsProjectArrayOutput) Index(i pulumi.IntInput) GetProjectsProjectOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetProjectsProject { + return vs[0].([]GetProjectsProject)[vs[1].(int)] + }).(GetProjectsProjectOutput) +} + +type GetServersServer struct { + Id string `pulumi:"id"` + IpAddress string `pulumi:"ipAddress"` + Name string `pulumi:"name"` + ServerStatus string `pulumi:"serverStatus"` +} + +// GetServersServerInput is an input type that accepts GetServersServerArgs and GetServersServerOutput values. +// You can construct a concrete instance of `GetServersServerInput` via: +// +// GetServersServerArgs{...} +type GetServersServerInput interface { + pulumi.Input + + ToGetServersServerOutput() GetServersServerOutput + ToGetServersServerOutputWithContext(context.Context) GetServersServerOutput +} + +type GetServersServerArgs struct { + Id pulumi.StringInput `pulumi:"id"` + IpAddress pulumi.StringInput `pulumi:"ipAddress"` + Name pulumi.StringInput `pulumi:"name"` + ServerStatus pulumi.StringInput `pulumi:"serverStatus"` +} + +func (GetServersServerArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetServersServer)(nil)).Elem() +} + +func (i GetServersServerArgs) ToGetServersServerOutput() GetServersServerOutput { + return i.ToGetServersServerOutputWithContext(context.Background()) +} + +func (i GetServersServerArgs) ToGetServersServerOutputWithContext(ctx context.Context) GetServersServerOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetServersServerOutput) +} + +// GetServersServerArrayInput is an input type that accepts GetServersServerArray and GetServersServerArrayOutput values. +// You can construct a concrete instance of `GetServersServerArrayInput` via: +// +// GetServersServerArray{ GetServersServerArgs{...} } +type GetServersServerArrayInput interface { + pulumi.Input + + ToGetServersServerArrayOutput() GetServersServerArrayOutput + ToGetServersServerArrayOutputWithContext(context.Context) GetServersServerArrayOutput +} + +type GetServersServerArray []GetServersServerInput + +func (GetServersServerArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetServersServer)(nil)).Elem() +} + +func (i GetServersServerArray) ToGetServersServerArrayOutput() GetServersServerArrayOutput { + return i.ToGetServersServerArrayOutputWithContext(context.Background()) +} + +func (i GetServersServerArray) ToGetServersServerArrayOutputWithContext(ctx context.Context) GetServersServerArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetServersServerArrayOutput) +} + +type GetServersServerOutput struct{ *pulumi.OutputState } + +func (GetServersServerOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetServersServer)(nil)).Elem() +} + +func (o GetServersServerOutput) ToGetServersServerOutput() GetServersServerOutput { + return o +} + +func (o GetServersServerOutput) ToGetServersServerOutputWithContext(ctx context.Context) GetServersServerOutput { + return o +} + +func (o GetServersServerOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetServersServer) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetServersServerOutput) IpAddress() pulumi.StringOutput { + return o.ApplyT(func(v GetServersServer) string { return v.IpAddress }).(pulumi.StringOutput) +} + +func (o GetServersServerOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetServersServer) string { return v.Name }).(pulumi.StringOutput) +} + +func (o GetServersServerOutput) ServerStatus() pulumi.StringOutput { + return o.ApplyT(func(v GetServersServer) string { return v.ServerStatus }).(pulumi.StringOutput) +} + +type GetServersServerArrayOutput struct{ *pulumi.OutputState } + +func (GetServersServerArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetServersServer)(nil)).Elem() +} + +func (o GetServersServerArrayOutput) ToGetServersServerArrayOutput() GetServersServerArrayOutput { + return o +} + +func (o GetServersServerArrayOutput) ToGetServersServerArrayOutputWithContext(ctx context.Context) GetServersServerArrayOutput { + return o +} + +func (o GetServersServerArrayOutput) Index(i pulumi.IntInput) GetServersServerOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetServersServer { + return vs[0].([]GetServersServer)[vs[1].(int)] + }).(GetServersServerOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*GetProjectEnvironmentInput)(nil)).Elem(), GetProjectEnvironmentArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetProjectEnvironmentArrayInput)(nil)).Elem(), GetProjectEnvironmentArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetProjectsProjectInput)(nil)).Elem(), GetProjectsProjectArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetProjectsProjectArrayInput)(nil)).Elem(), GetProjectsProjectArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetServersServerInput)(nil)).Elem(), GetServersServerArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetServersServerArrayInput)(nil)).Elem(), GetServersServerArray{}) + pulumi.RegisterOutputType(GetProjectEnvironmentOutput{}) + pulumi.RegisterOutputType(GetProjectEnvironmentArrayOutput{}) + pulumi.RegisterOutputType(GetProjectsProjectOutput{}) + pulumi.RegisterOutputType(GetProjectsProjectArrayOutput{}) + pulumi.RegisterOutputType(GetServersServerOutput{}) + pulumi.RegisterOutputType(GetServersServerArrayOutput{}) +} diff --git a/sdk/go/dokploy/redirect.go b/sdk/go/dokploy/redirect.go new file mode 100644 index 0000000..96f3465 --- /dev/null +++ b/sdk/go/dokploy/redirect.go @@ -0,0 +1,280 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Redirect struct { + pulumi.CustomResourceState + + // Application this redirect belongs to. + ApplicationId pulumi.StringOutput `pulumi:"applicationId"` + // RFC 3339 timestamp of when the redirect was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Issue a permanent (301) redirect instead of a temporary (302) one. + Permanent pulumi.BoolOutput `pulumi:"permanent"` + // Regular expression matched against the incoming URL. + Regex pulumi.StringOutput `pulumi:"regex"` + // Replacement URL, which may reference capture groups such as `${1}`. + Replacement pulumi.StringOutput `pulumi:"replacement"` +} + +// NewRedirect registers a new resource with the given unique name, arguments, and options. +func NewRedirect(ctx *pulumi.Context, + name string, args *RedirectArgs, opts ...pulumi.ResourceOption) (*Redirect, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ApplicationId == nil { + return nil, errors.New("invalid value for required argument 'ApplicationId'") + } + if args.Regex == nil { + return nil, errors.New("invalid value for required argument 'Regex'") + } + if args.Replacement == nil { + return nil, errors.New("invalid value for required argument 'Replacement'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Redirect + err := ctx.RegisterResource("dokploy:index/redirect:Redirect", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRedirect gets an existing Redirect resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRedirect(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RedirectState, opts ...pulumi.ResourceOption) (*Redirect, error) { + var resource Redirect + err := ctx.ReadResource("dokploy:index/redirect:Redirect", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Redirect resources. +type redirectState struct { + // Application this redirect belongs to. + ApplicationId *string `pulumi:"applicationId"` + // RFC 3339 timestamp of when the redirect was created. + CreatedAt *string `pulumi:"createdAt"` + // Issue a permanent (301) redirect instead of a temporary (302) one. + Permanent *bool `pulumi:"permanent"` + // Regular expression matched against the incoming URL. + Regex *string `pulumi:"regex"` + // Replacement URL, which may reference capture groups such as `${1}`. + Replacement *string `pulumi:"replacement"` +} + +type RedirectState struct { + // Application this redirect belongs to. + ApplicationId pulumi.StringPtrInput + // RFC 3339 timestamp of when the redirect was created. + CreatedAt pulumi.StringPtrInput + // Issue a permanent (301) redirect instead of a temporary (302) one. + Permanent pulumi.BoolPtrInput + // Regular expression matched against the incoming URL. + Regex pulumi.StringPtrInput + // Replacement URL, which may reference capture groups such as `${1}`. + Replacement pulumi.StringPtrInput +} + +func (RedirectState) ElementType() reflect.Type { + return reflect.TypeOf((*redirectState)(nil)).Elem() +} + +type redirectArgs struct { + // Application this redirect belongs to. + ApplicationId string `pulumi:"applicationId"` + // Issue a permanent (301) redirect instead of a temporary (302) one. + Permanent *bool `pulumi:"permanent"` + // Regular expression matched against the incoming URL. + Regex string `pulumi:"regex"` + // Replacement URL, which may reference capture groups such as `${1}`. + Replacement string `pulumi:"replacement"` +} + +// The set of arguments for constructing a Redirect resource. +type RedirectArgs struct { + // Application this redirect belongs to. + ApplicationId pulumi.StringInput + // Issue a permanent (301) redirect instead of a temporary (302) one. + Permanent pulumi.BoolPtrInput + // Regular expression matched against the incoming URL. + Regex pulumi.StringInput + // Replacement URL, which may reference capture groups such as `${1}`. + Replacement pulumi.StringInput +} + +func (RedirectArgs) ElementType() reflect.Type { + return reflect.TypeOf((*redirectArgs)(nil)).Elem() +} + +type RedirectInput interface { + pulumi.Input + + ToRedirectOutput() RedirectOutput + ToRedirectOutputWithContext(ctx context.Context) RedirectOutput +} + +func (*Redirect) ElementType() reflect.Type { + return reflect.TypeOf((**Redirect)(nil)).Elem() +} + +func (i *Redirect) ToRedirectOutput() RedirectOutput { + return i.ToRedirectOutputWithContext(context.Background()) +} + +func (i *Redirect) ToRedirectOutputWithContext(ctx context.Context) RedirectOutput { + return pulumi.ToOutputWithContext(ctx, i).(RedirectOutput) +} + +// RedirectArrayInput is an input type that accepts RedirectArray and RedirectArrayOutput values. +// You can construct a concrete instance of `RedirectArrayInput` via: +// +// RedirectArray{ RedirectArgs{...} } +type RedirectArrayInput interface { + pulumi.Input + + ToRedirectArrayOutput() RedirectArrayOutput + ToRedirectArrayOutputWithContext(context.Context) RedirectArrayOutput +} + +type RedirectArray []RedirectInput + +func (RedirectArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Redirect)(nil)).Elem() +} + +func (i RedirectArray) ToRedirectArrayOutput() RedirectArrayOutput { + return i.ToRedirectArrayOutputWithContext(context.Background()) +} + +func (i RedirectArray) ToRedirectArrayOutputWithContext(ctx context.Context) RedirectArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RedirectArrayOutput) +} + +// RedirectMapInput is an input type that accepts RedirectMap and RedirectMapOutput values. +// You can construct a concrete instance of `RedirectMapInput` via: +// +// RedirectMap{ "key": RedirectArgs{...} } +type RedirectMapInput interface { + pulumi.Input + + ToRedirectMapOutput() RedirectMapOutput + ToRedirectMapOutputWithContext(context.Context) RedirectMapOutput +} + +type RedirectMap map[string]RedirectInput + +func (RedirectMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Redirect)(nil)).Elem() +} + +func (i RedirectMap) ToRedirectMapOutput() RedirectMapOutput { + return i.ToRedirectMapOutputWithContext(context.Background()) +} + +func (i RedirectMap) ToRedirectMapOutputWithContext(ctx context.Context) RedirectMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RedirectMapOutput) +} + +type RedirectOutput struct{ *pulumi.OutputState } + +func (RedirectOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Redirect)(nil)).Elem() +} + +func (o RedirectOutput) ToRedirectOutput() RedirectOutput { + return o +} + +func (o RedirectOutput) ToRedirectOutputWithContext(ctx context.Context) RedirectOutput { + return o +} + +// Application this redirect belongs to. +func (o RedirectOutput) ApplicationId() pulumi.StringOutput { + return o.ApplyT(func(v *Redirect) pulumi.StringOutput { return v.ApplicationId }).(pulumi.StringOutput) +} + +// RFC 3339 timestamp of when the redirect was created. +func (o RedirectOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Redirect) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Issue a permanent (301) redirect instead of a temporary (302) one. +func (o RedirectOutput) Permanent() pulumi.BoolOutput { + return o.ApplyT(func(v *Redirect) pulumi.BoolOutput { return v.Permanent }).(pulumi.BoolOutput) +} + +// Regular expression matched against the incoming URL. +func (o RedirectOutput) Regex() pulumi.StringOutput { + return o.ApplyT(func(v *Redirect) pulumi.StringOutput { return v.Regex }).(pulumi.StringOutput) +} + +// Replacement URL, which may reference capture groups such as `${1}`. +func (o RedirectOutput) Replacement() pulumi.StringOutput { + return o.ApplyT(func(v *Redirect) pulumi.StringOutput { return v.Replacement }).(pulumi.StringOutput) +} + +type RedirectArrayOutput struct{ *pulumi.OutputState } + +func (RedirectArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Redirect)(nil)).Elem() +} + +func (o RedirectArrayOutput) ToRedirectArrayOutput() RedirectArrayOutput { + return o +} + +func (o RedirectArrayOutput) ToRedirectArrayOutputWithContext(ctx context.Context) RedirectArrayOutput { + return o +} + +func (o RedirectArrayOutput) Index(i pulumi.IntInput) RedirectOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Redirect { + return vs[0].([]*Redirect)[vs[1].(int)] + }).(RedirectOutput) +} + +type RedirectMapOutput struct{ *pulumi.OutputState } + +func (RedirectMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Redirect)(nil)).Elem() +} + +func (o RedirectMapOutput) ToRedirectMapOutput() RedirectMapOutput { + return o +} + +func (o RedirectMapOutput) ToRedirectMapOutputWithContext(ctx context.Context) RedirectMapOutput { + return o +} + +func (o RedirectMapOutput) MapIndex(k pulumi.StringInput) RedirectOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Redirect { + return vs[0].(map[string]*Redirect)[vs[1].(string)] + }).(RedirectOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RedirectInput)(nil)).Elem(), &Redirect{}) + pulumi.RegisterInputType(reflect.TypeOf((*RedirectArrayInput)(nil)).Elem(), RedirectArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RedirectMapInput)(nil)).Elem(), RedirectMap{}) + pulumi.RegisterOutputType(RedirectOutput{}) + pulumi.RegisterOutputType(RedirectArrayOutput{}) + pulumi.RegisterOutputType(RedirectMapOutput{}) +} diff --git a/sdk/go/dokploy/redis.go b/sdk/go/dokploy/redis.go new file mode 100644 index 0000000..2bc9acd --- /dev/null +++ b/sdk/go/dokploy/redis.go @@ -0,0 +1,673 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Redis struct { + pulumi.CustomResourceState + + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringOutput `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringOutput `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args pulumi.StringArrayOutput `pulumi:"args"` + // Override the container entrypoint command. + Command pulumi.StringPtrOutput `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrOutput `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrOutput `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Password used to authenticate to Redis. + DatabasePassword pulumi.StringOutput `pulumi:"databasePassword"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolOutput `pulumi:"detachDokployNetwork"` + // Redis image to run, for example `redis:7`. + DockerImage pulumi.StringOutput `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrOutput `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrOutput `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId pulumi.StringOutput `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrOutput `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrOutput `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrOutput `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrOutput `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrOutput `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrOutput `pulumi:"modeSwarm"` + // Display name of the database. + Name pulumi.StringOutput `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayOutput `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrOutput `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrOutput `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas pulumi.IntOutput `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrOutput `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrOutput `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrOutput `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrOutput `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrOutput `pulumi:"updateConfigSwarm"` +} + +// NewRedis registers a new resource with the given unique name, arguments, and options. +func NewRedis(ctx *pulumi.Context, + name string, args *RedisArgs, opts ...pulumi.ResourceOption) (*Redis, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DatabasePassword == nil { + return nil, errors.New("invalid value for required argument 'DatabasePassword'") + } + if args.DockerImage == nil { + return nil, errors.New("invalid value for required argument 'DockerImage'") + } + if args.EnvironmentId == nil { + return nil, errors.New("invalid value for required argument 'EnvironmentId'") + } + if args.DatabasePassword != nil { + args.DatabasePassword = pulumi.ToSecret(args.DatabasePassword).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "databasePassword", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Redis + err := ctx.RegisterResource("dokploy:index/redis:Redis", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRedis gets an existing Redis resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRedis(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RedisState, opts ...pulumi.ResourceOption) (*Redis, error) { + var resource Redis + err := ctx.ReadResource("dokploy:index/redis:Redis", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Redis resources. +type redisState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus *string `pulumi:"applicationStatus"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // RFC 3339 timestamp of when the database was created. + CreatedAt *string `pulumi:"createdAt"` + // Password used to authenticate to Redis. + DatabasePassword *string `pulumi:"databasePassword"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // Redis image to run, for example `redis:7`. + DockerImage *string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId *string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +type RedisState struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + ApplicationStatus pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // RFC 3339 timestamp of when the database was created. + CreatedAt pulumi.StringPtrInput + // Password used to authenticate to Redis. + DatabasePassword pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // Redis image to run, for example `redis:7`. + DockerImage pulumi.StringPtrInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringPtrInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (RedisState) ElementType() reflect.Type { + return reflect.TypeOf((*redisState)(nil)).Elem() +} + +type redisArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName *string `pulumi:"appName"` + // Arguments appended to the container command. + Args []string `pulumi:"args"` + // Override the container entrypoint command. + Command *string `pulumi:"command"` + // Hard CPU limit, for example `1`. + CpuLimit *string `pulumi:"cpuLimit"` + // Soft CPU reservation, for example `0.5`. + CpuReservation *string `pulumi:"cpuReservation"` + // Password used to authenticate to Redis. + DatabasePassword string `pulumi:"databasePassword"` + // Free-form description. + Description *string `pulumi:"description"` + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork *bool `pulumi:"detachDokployNetwork"` + // Redis image to run, for example `redis:7`. + DockerImage string `pulumi:"dockerImage"` + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm *string `pulumi:"endpointSpecSwarm"` + // Environment variables in `KEY=value` format, one per line. + Env *string `pulumi:"env"` + // Environment this database belongs to. + EnvironmentId string `pulumi:"environmentId"` + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort *int `pulumi:"externalPort"` + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm *string `pulumi:"healthCheckSwarm"` + // Docker Swarm service labels, as a JSON object. + LabelsSwarm *string `pulumi:"labelsSwarm"` + // Hard memory limit, for example `512m`. + MemoryLimit *string `pulumi:"memoryLimit"` + // Soft memory reservation, for example `256m`. + MemoryReservation *string `pulumi:"memoryReservation"` + // Docker Swarm service mode, as a JSON object. + ModeSwarm *string `pulumi:"modeSwarm"` + // Display name of the database. + Name *string `pulumi:"name"` + // IDs of additional Docker networks to attach. + NetworkIds []string `pulumi:"networkIds"` + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm *string `pulumi:"networkSwarm"` + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm *string `pulumi:"placementSwarm"` + // Number of replicas to run. + Replicas *int `pulumi:"replicas"` + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm *string `pulumi:"restartPolicySwarm"` + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm *string `pulumi:"rollbackConfigSwarm"` + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId *string `pulumi:"serverId"` + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm *int `pulumi:"stopGracePeriodSwarm"` + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm *string `pulumi:"ulimitsSwarm"` + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm *string `pulumi:"updateConfigSwarm"` +} + +// The set of arguments for constructing a Redis resource. +type RedisArgs struct { + // Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + AppName pulumi.StringPtrInput + // Arguments appended to the container command. + Args pulumi.StringArrayInput + // Override the container entrypoint command. + Command pulumi.StringPtrInput + // Hard CPU limit, for example `1`. + CpuLimit pulumi.StringPtrInput + // Soft CPU reservation, for example `0.5`. + CpuReservation pulumi.StringPtrInput + // Password used to authenticate to Redis. + DatabasePassword pulumi.StringInput + // Free-form description. + Description pulumi.StringPtrInput + // Detach the service from the shared `dokploy-network`. + DetachDokployNetwork pulumi.BoolPtrInput + // Redis image to run, for example `redis:7`. + DockerImage pulumi.StringInput + // Docker Swarm endpoint specification, as a JSON object. + EndpointSpecSwarm pulumi.StringPtrInput + // Environment variables in `KEY=value` format, one per line. + Env pulumi.StringPtrInput + // Environment this database belongs to. + EnvironmentId pulumi.StringInput + // Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + ExternalPort pulumi.IntPtrInput + // Docker Swarm health check configuration, as a JSON object. + HealthCheckSwarm pulumi.StringPtrInput + // Docker Swarm service labels, as a JSON object. + LabelsSwarm pulumi.StringPtrInput + // Hard memory limit, for example `512m`. + MemoryLimit pulumi.StringPtrInput + // Soft memory reservation, for example `256m`. + MemoryReservation pulumi.StringPtrInput + // Docker Swarm service mode, as a JSON object. + ModeSwarm pulumi.StringPtrInput + // Display name of the database. + Name pulumi.StringPtrInput + // IDs of additional Docker networks to attach. + NetworkIds pulumi.StringArrayInput + // Docker Swarm network attachments, as a JSON array. + NetworkSwarm pulumi.StringPtrInput + // Docker Swarm placement constraints, as a JSON object. + PlacementSwarm pulumi.StringPtrInput + // Number of replicas to run. + Replicas pulumi.IntPtrInput + // Docker Swarm restart policy, as a JSON object. + RestartPolicySwarm pulumi.StringPtrInput + // Docker Swarm rollback configuration, as a JSON object. + RollbackConfigSwarm pulumi.StringPtrInput + // Remote server to deploy on. Omit to use the Dokploy host itself. + ServerId pulumi.StringPtrInput + // Grace period in nanoseconds before a container is killed. + StopGracePeriodSwarm pulumi.IntPtrInput + // Docker Swarm ulimits, as a JSON object. + UlimitsSwarm pulumi.StringPtrInput + // Docker Swarm rolling update configuration, as a JSON object. + UpdateConfigSwarm pulumi.StringPtrInput +} + +func (RedisArgs) ElementType() reflect.Type { + return reflect.TypeOf((*redisArgs)(nil)).Elem() +} + +type RedisInput interface { + pulumi.Input + + ToRedisOutput() RedisOutput + ToRedisOutputWithContext(ctx context.Context) RedisOutput +} + +func (*Redis) ElementType() reflect.Type { + return reflect.TypeOf((**Redis)(nil)).Elem() +} + +func (i *Redis) ToRedisOutput() RedisOutput { + return i.ToRedisOutputWithContext(context.Background()) +} + +func (i *Redis) ToRedisOutputWithContext(ctx context.Context) RedisOutput { + return pulumi.ToOutputWithContext(ctx, i).(RedisOutput) +} + +// RedisArrayInput is an input type that accepts RedisArray and RedisArrayOutput values. +// You can construct a concrete instance of `RedisArrayInput` via: +// +// RedisArray{ RedisArgs{...} } +type RedisArrayInput interface { + pulumi.Input + + ToRedisArrayOutput() RedisArrayOutput + ToRedisArrayOutputWithContext(context.Context) RedisArrayOutput +} + +type RedisArray []RedisInput + +func (RedisArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Redis)(nil)).Elem() +} + +func (i RedisArray) ToRedisArrayOutput() RedisArrayOutput { + return i.ToRedisArrayOutputWithContext(context.Background()) +} + +func (i RedisArray) ToRedisArrayOutputWithContext(ctx context.Context) RedisArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RedisArrayOutput) +} + +// RedisMapInput is an input type that accepts RedisMap and RedisMapOutput values. +// You can construct a concrete instance of `RedisMapInput` via: +// +// RedisMap{ "key": RedisArgs{...} } +type RedisMapInput interface { + pulumi.Input + + ToRedisMapOutput() RedisMapOutput + ToRedisMapOutputWithContext(context.Context) RedisMapOutput +} + +type RedisMap map[string]RedisInput + +func (RedisMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Redis)(nil)).Elem() +} + +func (i RedisMap) ToRedisMapOutput() RedisMapOutput { + return i.ToRedisMapOutputWithContext(context.Background()) +} + +func (i RedisMap) ToRedisMapOutputWithContext(ctx context.Context) RedisMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RedisMapOutput) +} + +type RedisOutput struct{ *pulumi.OutputState } + +func (RedisOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Redis)(nil)).Elem() +} + +func (o RedisOutput) ToRedisOutput() RedisOutput { + return o +} + +func (o RedisOutput) ToRedisOutputWithContext(ctx context.Context) RedisOutput { + return o +} + +// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. +func (o RedisOutput) AppName() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.AppName }).(pulumi.StringOutput) +} + +// Current status reported by Dokploy: `idle`, `running`, `done` or `error`. +func (o RedisOutput) ApplicationStatus() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.ApplicationStatus }).(pulumi.StringOutput) +} + +// Arguments appended to the container command. +func (o RedisOutput) Args() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Redis) pulumi.StringArrayOutput { return v.Args }).(pulumi.StringArrayOutput) +} + +// Override the container entrypoint command. +func (o RedisOutput) Command() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.Command }).(pulumi.StringPtrOutput) +} + +// Hard CPU limit, for example `1`. +func (o RedisOutput) CpuLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.CpuLimit }).(pulumi.StringPtrOutput) +} + +// Soft CPU reservation, for example `0.5`. +func (o RedisOutput) CpuReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.CpuReservation }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the database was created. +func (o RedisOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Password used to authenticate to Redis. +func (o RedisOutput) DatabasePassword() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.DatabasePassword }).(pulumi.StringOutput) +} + +// Free-form description. +func (o RedisOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Detach the service from the shared `dokploy-network`. +func (o RedisOutput) DetachDokployNetwork() pulumi.BoolOutput { + return o.ApplyT(func(v *Redis) pulumi.BoolOutput { return v.DetachDokployNetwork }).(pulumi.BoolOutput) +} + +// Redis image to run, for example `redis:7`. +func (o RedisOutput) DockerImage() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.DockerImage }).(pulumi.StringOutput) +} + +// Docker Swarm endpoint specification, as a JSON object. +func (o RedisOutput) EndpointSpecSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.EndpointSpecSwarm }).(pulumi.StringPtrOutput) +} + +// Environment variables in `KEY=value` format, one per line. +func (o RedisOutput) Env() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.Env }).(pulumi.StringPtrOutput) +} + +// Environment this database belongs to. +func (o RedisOutput) EnvironmentId() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.EnvironmentId }).(pulumi.StringOutput) +} + +// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. +func (o RedisOutput) ExternalPort() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.IntPtrOutput { return v.ExternalPort }).(pulumi.IntPtrOutput) +} + +// Docker Swarm health check configuration, as a JSON object. +func (o RedisOutput) HealthCheckSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.HealthCheckSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service labels, as a JSON object. +func (o RedisOutput) LabelsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.LabelsSwarm }).(pulumi.StringPtrOutput) +} + +// Hard memory limit, for example `512m`. +func (o RedisOutput) MemoryLimit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.MemoryLimit }).(pulumi.StringPtrOutput) +} + +// Soft memory reservation, for example `256m`. +func (o RedisOutput) MemoryReservation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.MemoryReservation }).(pulumi.StringPtrOutput) +} + +// Docker Swarm service mode, as a JSON object. +func (o RedisOutput) ModeSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.ModeSwarm }).(pulumi.StringPtrOutput) +} + +// Display name of the database. +func (o RedisOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Redis) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// IDs of additional Docker networks to attach. +func (o RedisOutput) NetworkIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Redis) pulumi.StringArrayOutput { return v.NetworkIds }).(pulumi.StringArrayOutput) +} + +// Docker Swarm network attachments, as a JSON array. +func (o RedisOutput) NetworkSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.NetworkSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm placement constraints, as a JSON object. +func (o RedisOutput) PlacementSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.PlacementSwarm }).(pulumi.StringPtrOutput) +} + +// Number of replicas to run. +func (o RedisOutput) Replicas() pulumi.IntOutput { + return o.ApplyT(func(v *Redis) pulumi.IntOutput { return v.Replicas }).(pulumi.IntOutput) +} + +// Docker Swarm restart policy, as a JSON object. +func (o RedisOutput) RestartPolicySwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.RestartPolicySwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rollback configuration, as a JSON object. +func (o RedisOutput) RollbackConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.RollbackConfigSwarm }).(pulumi.StringPtrOutput) +} + +// Remote server to deploy on. Omit to use the Dokploy host itself. +func (o RedisOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Grace period in nanoseconds before a container is killed. +func (o RedisOutput) StopGracePeriodSwarm() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.IntPtrOutput { return v.StopGracePeriodSwarm }).(pulumi.IntPtrOutput) +} + +// Docker Swarm ulimits, as a JSON object. +func (o RedisOutput) UlimitsSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.UlimitsSwarm }).(pulumi.StringPtrOutput) +} + +// Docker Swarm rolling update configuration, as a JSON object. +func (o RedisOutput) UpdateConfigSwarm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Redis) pulumi.StringPtrOutput { return v.UpdateConfigSwarm }).(pulumi.StringPtrOutput) +} + +type RedisArrayOutput struct{ *pulumi.OutputState } + +func (RedisArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Redis)(nil)).Elem() +} + +func (o RedisArrayOutput) ToRedisArrayOutput() RedisArrayOutput { + return o +} + +func (o RedisArrayOutput) ToRedisArrayOutputWithContext(ctx context.Context) RedisArrayOutput { + return o +} + +func (o RedisArrayOutput) Index(i pulumi.IntInput) RedisOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Redis { + return vs[0].([]*Redis)[vs[1].(int)] + }).(RedisOutput) +} + +type RedisMapOutput struct{ *pulumi.OutputState } + +func (RedisMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Redis)(nil)).Elem() +} + +func (o RedisMapOutput) ToRedisMapOutput() RedisMapOutput { + return o +} + +func (o RedisMapOutput) ToRedisMapOutputWithContext(ctx context.Context) RedisMapOutput { + return o +} + +func (o RedisMapOutput) MapIndex(k pulumi.StringInput) RedisOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Redis { + return vs[0].(map[string]*Redis)[vs[1].(string)] + }).(RedisOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RedisInput)(nil)).Elem(), &Redis{}) + pulumi.RegisterInputType(reflect.TypeOf((*RedisArrayInput)(nil)).Elem(), RedisArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RedisMapInput)(nil)).Elem(), RedisMap{}) + pulumi.RegisterOutputType(RedisOutput{}) + pulumi.RegisterOutputType(RedisArrayOutput{}) + pulumi.RegisterOutputType(RedisMapOutput{}) +} diff --git a/sdk/go/dokploy/registry.go b/sdk/go/dokploy/registry.go new file mode 100644 index 0000000..61cb8b4 --- /dev/null +++ b/sdk/go/dokploy/registry.go @@ -0,0 +1,335 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Registry struct { + pulumi.CustomResourceState + + // RFC 3339 timestamp of when the registry was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Prefix prepended to pushed image names, for example an organization or namespace. + ImagePrefix pulumi.StringPtrOutput `pulumi:"imagePrefix"` + // Password or access token used to authenticate. + Password pulumi.StringOutput `pulumi:"password"` + // Display name of the registry. + RegistryName pulumi.StringOutput `pulumi:"registryName"` + // Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + RegistryType pulumi.StringOutput `pulumi:"registryType"` + // Registry hostname, for example `ghcr.io`. + RegistryUrl pulumi.StringOutput `pulumi:"registryUrl"` + // Server this registry is scoped to. + ServerId pulumi.StringPtrOutput `pulumi:"serverId"` + // Username used to authenticate to the registry. + Username pulumi.StringOutput `pulumi:"username"` +} + +// NewRegistry registers a new resource with the given unique name, arguments, and options. +func NewRegistry(ctx *pulumi.Context, + name string, args *RegistryArgs, opts ...pulumi.ResourceOption) (*Registry, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Password == nil { + return nil, errors.New("invalid value for required argument 'Password'") + } + if args.RegistryName == nil { + return nil, errors.New("invalid value for required argument 'RegistryName'") + } + if args.RegistryUrl == nil { + return nil, errors.New("invalid value for required argument 'RegistryUrl'") + } + if args.Username == nil { + return nil, errors.New("invalid value for required argument 'Username'") + } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "password", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Registry + err := ctx.RegisterResource("dokploy:index/registry:Registry", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRegistry gets an existing Registry resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRegistry(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RegistryState, opts ...pulumi.ResourceOption) (*Registry, error) { + var resource Registry + err := ctx.ReadResource("dokploy:index/registry:Registry", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Registry resources. +type registryState struct { + // RFC 3339 timestamp of when the registry was created. + CreatedAt *string `pulumi:"createdAt"` + // Prefix prepended to pushed image names, for example an organization or namespace. + ImagePrefix *string `pulumi:"imagePrefix"` + // Password or access token used to authenticate. + Password *string `pulumi:"password"` + // Display name of the registry. + RegistryName *string `pulumi:"registryName"` + // Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + RegistryType *string `pulumi:"registryType"` + // Registry hostname, for example `ghcr.io`. + RegistryUrl *string `pulumi:"registryUrl"` + // Server this registry is scoped to. + ServerId *string `pulumi:"serverId"` + // Username used to authenticate to the registry. + Username *string `pulumi:"username"` +} + +type RegistryState struct { + // RFC 3339 timestamp of when the registry was created. + CreatedAt pulumi.StringPtrInput + // Prefix prepended to pushed image names, for example an organization or namespace. + ImagePrefix pulumi.StringPtrInput + // Password or access token used to authenticate. + Password pulumi.StringPtrInput + // Display name of the registry. + RegistryName pulumi.StringPtrInput + // Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + RegistryType pulumi.StringPtrInput + // Registry hostname, for example `ghcr.io`. + RegistryUrl pulumi.StringPtrInput + // Server this registry is scoped to. + ServerId pulumi.StringPtrInput + // Username used to authenticate to the registry. + Username pulumi.StringPtrInput +} + +func (RegistryState) ElementType() reflect.Type { + return reflect.TypeOf((*registryState)(nil)).Elem() +} + +type registryArgs struct { + // Prefix prepended to pushed image names, for example an organization or namespace. + ImagePrefix *string `pulumi:"imagePrefix"` + // Password or access token used to authenticate. + Password string `pulumi:"password"` + // Display name of the registry. + RegistryName string `pulumi:"registryName"` + // Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + RegistryType *string `pulumi:"registryType"` + // Registry hostname, for example `ghcr.io`. + RegistryUrl string `pulumi:"registryUrl"` + // Server this registry is scoped to. + ServerId *string `pulumi:"serverId"` + // Username used to authenticate to the registry. + Username string `pulumi:"username"` +} + +// The set of arguments for constructing a Registry resource. +type RegistryArgs struct { + // Prefix prepended to pushed image names, for example an organization or namespace. + ImagePrefix pulumi.StringPtrInput + // Password or access token used to authenticate. + Password pulumi.StringInput + // Display name of the registry. + RegistryName pulumi.StringInput + // Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + RegistryType pulumi.StringPtrInput + // Registry hostname, for example `ghcr.io`. + RegistryUrl pulumi.StringInput + // Server this registry is scoped to. + ServerId pulumi.StringPtrInput + // Username used to authenticate to the registry. + Username pulumi.StringInput +} + +func (RegistryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*registryArgs)(nil)).Elem() +} + +type RegistryInput interface { + pulumi.Input + + ToRegistryOutput() RegistryOutput + ToRegistryOutputWithContext(ctx context.Context) RegistryOutput +} + +func (*Registry) ElementType() reflect.Type { + return reflect.TypeOf((**Registry)(nil)).Elem() +} + +func (i *Registry) ToRegistryOutput() RegistryOutput { + return i.ToRegistryOutputWithContext(context.Background()) +} + +func (i *Registry) ToRegistryOutputWithContext(ctx context.Context) RegistryOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegistryOutput) +} + +// RegistryArrayInput is an input type that accepts RegistryArray and RegistryArrayOutput values. +// You can construct a concrete instance of `RegistryArrayInput` via: +// +// RegistryArray{ RegistryArgs{...} } +type RegistryArrayInput interface { + pulumi.Input + + ToRegistryArrayOutput() RegistryArrayOutput + ToRegistryArrayOutputWithContext(context.Context) RegistryArrayOutput +} + +type RegistryArray []RegistryInput + +func (RegistryArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Registry)(nil)).Elem() +} + +func (i RegistryArray) ToRegistryArrayOutput() RegistryArrayOutput { + return i.ToRegistryArrayOutputWithContext(context.Background()) +} + +func (i RegistryArray) ToRegistryArrayOutputWithContext(ctx context.Context) RegistryArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegistryArrayOutput) +} + +// RegistryMapInput is an input type that accepts RegistryMap and RegistryMapOutput values. +// You can construct a concrete instance of `RegistryMapInput` via: +// +// RegistryMap{ "key": RegistryArgs{...} } +type RegistryMapInput interface { + pulumi.Input + + ToRegistryMapOutput() RegistryMapOutput + ToRegistryMapOutputWithContext(context.Context) RegistryMapOutput +} + +type RegistryMap map[string]RegistryInput + +func (RegistryMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Registry)(nil)).Elem() +} + +func (i RegistryMap) ToRegistryMapOutput() RegistryMapOutput { + return i.ToRegistryMapOutputWithContext(context.Background()) +} + +func (i RegistryMap) ToRegistryMapOutputWithContext(ctx context.Context) RegistryMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegistryMapOutput) +} + +type RegistryOutput struct{ *pulumi.OutputState } + +func (RegistryOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Registry)(nil)).Elem() +} + +func (o RegistryOutput) ToRegistryOutput() RegistryOutput { + return o +} + +func (o RegistryOutput) ToRegistryOutputWithContext(ctx context.Context) RegistryOutput { + return o +} + +// RFC 3339 timestamp of when the registry was created. +func (o RegistryOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Registry) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Prefix prepended to pushed image names, for example an organization or namespace. +func (o RegistryOutput) ImagePrefix() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Registry) pulumi.StringPtrOutput { return v.ImagePrefix }).(pulumi.StringPtrOutput) +} + +// Password or access token used to authenticate. +func (o RegistryOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v *Registry) pulumi.StringOutput { return v.Password }).(pulumi.StringOutput) +} + +// Display name of the registry. +func (o RegistryOutput) RegistryName() pulumi.StringOutput { + return o.ApplyT(func(v *Registry) pulumi.StringOutput { return v.RegistryName }).(pulumi.StringOutput) +} + +// Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. +func (o RegistryOutput) RegistryType() pulumi.StringOutput { + return o.ApplyT(func(v *Registry) pulumi.StringOutput { return v.RegistryType }).(pulumi.StringOutput) +} + +// Registry hostname, for example `ghcr.io`. +func (o RegistryOutput) RegistryUrl() pulumi.StringOutput { + return o.ApplyT(func(v *Registry) pulumi.StringOutput { return v.RegistryUrl }).(pulumi.StringOutput) +} + +// Server this registry is scoped to. +func (o RegistryOutput) ServerId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Registry) pulumi.StringPtrOutput { return v.ServerId }).(pulumi.StringPtrOutput) +} + +// Username used to authenticate to the registry. +func (o RegistryOutput) Username() pulumi.StringOutput { + return o.ApplyT(func(v *Registry) pulumi.StringOutput { return v.Username }).(pulumi.StringOutput) +} + +type RegistryArrayOutput struct{ *pulumi.OutputState } + +func (RegistryArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Registry)(nil)).Elem() +} + +func (o RegistryArrayOutput) ToRegistryArrayOutput() RegistryArrayOutput { + return o +} + +func (o RegistryArrayOutput) ToRegistryArrayOutputWithContext(ctx context.Context) RegistryArrayOutput { + return o +} + +func (o RegistryArrayOutput) Index(i pulumi.IntInput) RegistryOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Registry { + return vs[0].([]*Registry)[vs[1].(int)] + }).(RegistryOutput) +} + +type RegistryMapOutput struct{ *pulumi.OutputState } + +func (RegistryMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Registry)(nil)).Elem() +} + +func (o RegistryMapOutput) ToRegistryMapOutput() RegistryMapOutput { + return o +} + +func (o RegistryMapOutput) ToRegistryMapOutputWithContext(ctx context.Context) RegistryMapOutput { + return o +} + +func (o RegistryMapOutput) MapIndex(k pulumi.StringInput) RegistryOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Registry { + return vs[0].(map[string]*Registry)[vs[1].(string)] + }).(RegistryOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RegistryInput)(nil)).Elem(), &Registry{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegistryArrayInput)(nil)).Elem(), RegistryArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegistryMapInput)(nil)).Elem(), RegistryMap{}) + pulumi.RegisterOutputType(RegistryOutput{}) + pulumi.RegisterOutputType(RegistryArrayOutput{}) + pulumi.RegisterOutputType(RegistryMapOutput{}) +} diff --git a/sdk/go/dokploy/security.go b/sdk/go/dokploy/security.go new file mode 100644 index 0000000..aa89d63 --- /dev/null +++ b/sdk/go/dokploy/security.go @@ -0,0 +1,272 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Security struct { + pulumi.CustomResourceState + + // Application these credentials protect. + ApplicationId pulumi.StringOutput `pulumi:"applicationId"` + // RFC 3339 timestamp of when the credentials were created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Basic auth password. + Password pulumi.StringOutput `pulumi:"password"` + // Basic auth username. + Username pulumi.StringOutput `pulumi:"username"` +} + +// NewSecurity registers a new resource with the given unique name, arguments, and options. +func NewSecurity(ctx *pulumi.Context, + name string, args *SecurityArgs, opts ...pulumi.ResourceOption) (*Security, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ApplicationId == nil { + return nil, errors.New("invalid value for required argument 'ApplicationId'") + } + if args.Password == nil { + return nil, errors.New("invalid value for required argument 'Password'") + } + if args.Username == nil { + return nil, errors.New("invalid value for required argument 'Username'") + } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "password", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Security + err := ctx.RegisterResource("dokploy:index/security:Security", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetSecurity gets an existing Security resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetSecurity(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *SecurityState, opts ...pulumi.ResourceOption) (*Security, error) { + var resource Security + err := ctx.ReadResource("dokploy:index/security:Security", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Security resources. +type securityState struct { + // Application these credentials protect. + ApplicationId *string `pulumi:"applicationId"` + // RFC 3339 timestamp of when the credentials were created. + CreatedAt *string `pulumi:"createdAt"` + // Basic auth password. + Password *string `pulumi:"password"` + // Basic auth username. + Username *string `pulumi:"username"` +} + +type SecurityState struct { + // Application these credentials protect. + ApplicationId pulumi.StringPtrInput + // RFC 3339 timestamp of when the credentials were created. + CreatedAt pulumi.StringPtrInput + // Basic auth password. + Password pulumi.StringPtrInput + // Basic auth username. + Username pulumi.StringPtrInput +} + +func (SecurityState) ElementType() reflect.Type { + return reflect.TypeOf((*securityState)(nil)).Elem() +} + +type securityArgs struct { + // Application these credentials protect. + ApplicationId string `pulumi:"applicationId"` + // Basic auth password. + Password string `pulumi:"password"` + // Basic auth username. + Username string `pulumi:"username"` +} + +// The set of arguments for constructing a Security resource. +type SecurityArgs struct { + // Application these credentials protect. + ApplicationId pulumi.StringInput + // Basic auth password. + Password pulumi.StringInput + // Basic auth username. + Username pulumi.StringInput +} + +func (SecurityArgs) ElementType() reflect.Type { + return reflect.TypeOf((*securityArgs)(nil)).Elem() +} + +type SecurityInput interface { + pulumi.Input + + ToSecurityOutput() SecurityOutput + ToSecurityOutputWithContext(ctx context.Context) SecurityOutput +} + +func (*Security) ElementType() reflect.Type { + return reflect.TypeOf((**Security)(nil)).Elem() +} + +func (i *Security) ToSecurityOutput() SecurityOutput { + return i.ToSecurityOutputWithContext(context.Background()) +} + +func (i *Security) ToSecurityOutputWithContext(ctx context.Context) SecurityOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityOutput) +} + +// SecurityArrayInput is an input type that accepts SecurityArray and SecurityArrayOutput values. +// You can construct a concrete instance of `SecurityArrayInput` via: +// +// SecurityArray{ SecurityArgs{...} } +type SecurityArrayInput interface { + pulumi.Input + + ToSecurityArrayOutput() SecurityArrayOutput + ToSecurityArrayOutputWithContext(context.Context) SecurityArrayOutput +} + +type SecurityArray []SecurityInput + +func (SecurityArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Security)(nil)).Elem() +} + +func (i SecurityArray) ToSecurityArrayOutput() SecurityArrayOutput { + return i.ToSecurityArrayOutputWithContext(context.Background()) +} + +func (i SecurityArray) ToSecurityArrayOutputWithContext(ctx context.Context) SecurityArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityArrayOutput) +} + +// SecurityMapInput is an input type that accepts SecurityMap and SecurityMapOutput values. +// You can construct a concrete instance of `SecurityMapInput` via: +// +// SecurityMap{ "key": SecurityArgs{...} } +type SecurityMapInput interface { + pulumi.Input + + ToSecurityMapOutput() SecurityMapOutput + ToSecurityMapOutputWithContext(context.Context) SecurityMapOutput +} + +type SecurityMap map[string]SecurityInput + +func (SecurityMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Security)(nil)).Elem() +} + +func (i SecurityMap) ToSecurityMapOutput() SecurityMapOutput { + return i.ToSecurityMapOutputWithContext(context.Background()) +} + +func (i SecurityMap) ToSecurityMapOutputWithContext(ctx context.Context) SecurityMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityMapOutput) +} + +type SecurityOutput struct{ *pulumi.OutputState } + +func (SecurityOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Security)(nil)).Elem() +} + +func (o SecurityOutput) ToSecurityOutput() SecurityOutput { + return o +} + +func (o SecurityOutput) ToSecurityOutputWithContext(ctx context.Context) SecurityOutput { + return o +} + +// Application these credentials protect. +func (o SecurityOutput) ApplicationId() pulumi.StringOutput { + return o.ApplyT(func(v *Security) pulumi.StringOutput { return v.ApplicationId }).(pulumi.StringOutput) +} + +// RFC 3339 timestamp of when the credentials were created. +func (o SecurityOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *Security) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Basic auth password. +func (o SecurityOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v *Security) pulumi.StringOutput { return v.Password }).(pulumi.StringOutput) +} + +// Basic auth username. +func (o SecurityOutput) Username() pulumi.StringOutput { + return o.ApplyT(func(v *Security) pulumi.StringOutput { return v.Username }).(pulumi.StringOutput) +} + +type SecurityArrayOutput struct{ *pulumi.OutputState } + +func (SecurityArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Security)(nil)).Elem() +} + +func (o SecurityArrayOutput) ToSecurityArrayOutput() SecurityArrayOutput { + return o +} + +func (o SecurityArrayOutput) ToSecurityArrayOutputWithContext(ctx context.Context) SecurityArrayOutput { + return o +} + +func (o SecurityArrayOutput) Index(i pulumi.IntInput) SecurityOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Security { + return vs[0].([]*Security)[vs[1].(int)] + }).(SecurityOutput) +} + +type SecurityMapOutput struct{ *pulumi.OutputState } + +func (SecurityMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Security)(nil)).Elem() +} + +func (o SecurityMapOutput) ToSecurityMapOutput() SecurityMapOutput { + return o +} + +func (o SecurityMapOutput) ToSecurityMapOutputWithContext(ctx context.Context) SecurityMapOutput { + return o +} + +func (o SecurityMapOutput) MapIndex(k pulumi.StringInput) SecurityOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Security { + return vs[0].(map[string]*Security)[vs[1].(string)] + }).(SecurityOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*SecurityInput)(nil)).Elem(), &Security{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityArrayInput)(nil)).Elem(), SecurityArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityMapInput)(nil)).Elem(), SecurityMap{}) + pulumi.RegisterOutputType(SecurityOutput{}) + pulumi.RegisterOutputType(SecurityArrayOutput{}) + pulumi.RegisterOutputType(SecurityMapOutput{}) +} diff --git a/sdk/go/dokploy/sshKey.go b/sdk/go/dokploy/sshKey.go new file mode 100644 index 0000000..423b802 --- /dev/null +++ b/sdk/go/dokploy/sshKey.go @@ -0,0 +1,295 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package dokploy + +import ( + "context" + "reflect" + + "errors" + "github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type SshKey struct { + pulumi.CustomResourceState + + // RFC 3339 timestamp of when the key was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // Free-form description. + Description pulumi.StringPtrOutput `pulumi:"description"` + // RFC 3339 timestamp of when the key was last used, if ever. + LastUsedAt pulumi.StringOutput `pulumi:"lastUsedAt"` + // Display name of the key pair. + Name pulumi.StringOutput `pulumi:"name"` + // PEM-encoded private key. + PrivateKey pulumi.StringOutput `pulumi:"privateKey"` + // OpenSSH-formatted public key. + PublicKey pulumi.StringOutput `pulumi:"publicKey"` +} + +// NewSshKey registers a new resource with the given unique name, arguments, and options. +func NewSshKey(ctx *pulumi.Context, + name string, args *SshKeyArgs, opts ...pulumi.ResourceOption) (*SshKey, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.PrivateKey == nil { + return nil, errors.New("invalid value for required argument 'PrivateKey'") + } + if args.PublicKey == nil { + return nil, errors.New("invalid value for required argument 'PublicKey'") + } + if args.PrivateKey != nil { + args.PrivateKey = pulumi.ToSecret(args.PrivateKey).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "privateKey", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource SshKey + err := ctx.RegisterResource("dokploy:index/sshKey:SshKey", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetSshKey gets an existing SshKey resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetSshKey(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *SshKeyState, opts ...pulumi.ResourceOption) (*SshKey, error) { + var resource SshKey + err := ctx.ReadResource("dokploy:index/sshKey:SshKey", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering SshKey resources. +type sshKeyState struct { + // RFC 3339 timestamp of when the key was created. + CreatedAt *string `pulumi:"createdAt"` + // Free-form description. + Description *string `pulumi:"description"` + // RFC 3339 timestamp of when the key was last used, if ever. + LastUsedAt *string `pulumi:"lastUsedAt"` + // Display name of the key pair. + Name *string `pulumi:"name"` + // PEM-encoded private key. + PrivateKey *string `pulumi:"privateKey"` + // OpenSSH-formatted public key. + PublicKey *string `pulumi:"publicKey"` +} + +type SshKeyState struct { + // RFC 3339 timestamp of when the key was created. + CreatedAt pulumi.StringPtrInput + // Free-form description. + Description pulumi.StringPtrInput + // RFC 3339 timestamp of when the key was last used, if ever. + LastUsedAt pulumi.StringPtrInput + // Display name of the key pair. + Name pulumi.StringPtrInput + // PEM-encoded private key. + PrivateKey pulumi.StringPtrInput + // OpenSSH-formatted public key. + PublicKey pulumi.StringPtrInput +} + +func (SshKeyState) ElementType() reflect.Type { + return reflect.TypeOf((*sshKeyState)(nil)).Elem() +} + +type sshKeyArgs struct { + // Free-form description. + Description *string `pulumi:"description"` + // Display name of the key pair. + Name *string `pulumi:"name"` + // PEM-encoded private key. + PrivateKey string `pulumi:"privateKey"` + // OpenSSH-formatted public key. + PublicKey string `pulumi:"publicKey"` +} + +// The set of arguments for constructing a SshKey resource. +type SshKeyArgs struct { + // Free-form description. + Description pulumi.StringPtrInput + // Display name of the key pair. + Name pulumi.StringPtrInput + // PEM-encoded private key. + PrivateKey pulumi.StringInput + // OpenSSH-formatted public key. + PublicKey pulumi.StringInput +} + +func (SshKeyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*sshKeyArgs)(nil)).Elem() +} + +type SshKeyInput interface { + pulumi.Input + + ToSshKeyOutput() SshKeyOutput + ToSshKeyOutputWithContext(ctx context.Context) SshKeyOutput +} + +func (*SshKey) ElementType() reflect.Type { + return reflect.TypeOf((**SshKey)(nil)).Elem() +} + +func (i *SshKey) ToSshKeyOutput() SshKeyOutput { + return i.ToSshKeyOutputWithContext(context.Background()) +} + +func (i *SshKey) ToSshKeyOutputWithContext(ctx context.Context) SshKeyOutput { + return pulumi.ToOutputWithContext(ctx, i).(SshKeyOutput) +} + +// SshKeyArrayInput is an input type that accepts SshKeyArray and SshKeyArrayOutput values. +// You can construct a concrete instance of `SshKeyArrayInput` via: +// +// SshKeyArray{ SshKeyArgs{...} } +type SshKeyArrayInput interface { + pulumi.Input + + ToSshKeyArrayOutput() SshKeyArrayOutput + ToSshKeyArrayOutputWithContext(context.Context) SshKeyArrayOutput +} + +type SshKeyArray []SshKeyInput + +func (SshKeyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*SshKey)(nil)).Elem() +} + +func (i SshKeyArray) ToSshKeyArrayOutput() SshKeyArrayOutput { + return i.ToSshKeyArrayOutputWithContext(context.Background()) +} + +func (i SshKeyArray) ToSshKeyArrayOutputWithContext(ctx context.Context) SshKeyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(SshKeyArrayOutput) +} + +// SshKeyMapInput is an input type that accepts SshKeyMap and SshKeyMapOutput values. +// You can construct a concrete instance of `SshKeyMapInput` via: +// +// SshKeyMap{ "key": SshKeyArgs{...} } +type SshKeyMapInput interface { + pulumi.Input + + ToSshKeyMapOutput() SshKeyMapOutput + ToSshKeyMapOutputWithContext(context.Context) SshKeyMapOutput +} + +type SshKeyMap map[string]SshKeyInput + +func (SshKeyMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*SshKey)(nil)).Elem() +} + +func (i SshKeyMap) ToSshKeyMapOutput() SshKeyMapOutput { + return i.ToSshKeyMapOutputWithContext(context.Background()) +} + +func (i SshKeyMap) ToSshKeyMapOutputWithContext(ctx context.Context) SshKeyMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(SshKeyMapOutput) +} + +type SshKeyOutput struct{ *pulumi.OutputState } + +func (SshKeyOutput) ElementType() reflect.Type { + return reflect.TypeOf((**SshKey)(nil)).Elem() +} + +func (o SshKeyOutput) ToSshKeyOutput() SshKeyOutput { + return o +} + +func (o SshKeyOutput) ToSshKeyOutputWithContext(ctx context.Context) SshKeyOutput { + return o +} + +// RFC 3339 timestamp of when the key was created. +func (o SshKeyOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *SshKey) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// Free-form description. +func (o SshKeyOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *SshKey) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// RFC 3339 timestamp of when the key was last used, if ever. +func (o SshKeyOutput) LastUsedAt() pulumi.StringOutput { + return o.ApplyT(func(v *SshKey) pulumi.StringOutput { return v.LastUsedAt }).(pulumi.StringOutput) +} + +// Display name of the key pair. +func (o SshKeyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *SshKey) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// PEM-encoded private key. +func (o SshKeyOutput) PrivateKey() pulumi.StringOutput { + return o.ApplyT(func(v *SshKey) pulumi.StringOutput { return v.PrivateKey }).(pulumi.StringOutput) +} + +// OpenSSH-formatted public key. +func (o SshKeyOutput) PublicKey() pulumi.StringOutput { + return o.ApplyT(func(v *SshKey) pulumi.StringOutput { return v.PublicKey }).(pulumi.StringOutput) +} + +type SshKeyArrayOutput struct{ *pulumi.OutputState } + +func (SshKeyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*SshKey)(nil)).Elem() +} + +func (o SshKeyArrayOutput) ToSshKeyArrayOutput() SshKeyArrayOutput { + return o +} + +func (o SshKeyArrayOutput) ToSshKeyArrayOutputWithContext(ctx context.Context) SshKeyArrayOutput { + return o +} + +func (o SshKeyArrayOutput) Index(i pulumi.IntInput) SshKeyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *SshKey { + return vs[0].([]*SshKey)[vs[1].(int)] + }).(SshKeyOutput) +} + +type SshKeyMapOutput struct{ *pulumi.OutputState } + +func (SshKeyMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*SshKey)(nil)).Elem() +} + +func (o SshKeyMapOutput) ToSshKeyMapOutput() SshKeyMapOutput { + return o +} + +func (o SshKeyMapOutput) ToSshKeyMapOutputWithContext(ctx context.Context) SshKeyMapOutput { + return o +} + +func (o SshKeyMapOutput) MapIndex(k pulumi.StringInput) SshKeyOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *SshKey { + return vs[0].(map[string]*SshKey)[vs[1].(string)] + }).(SshKeyOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*SshKeyInput)(nil)).Elem(), &SshKey{}) + pulumi.RegisterInputType(reflect.TypeOf((*SshKeyArrayInput)(nil)).Elem(), SshKeyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*SshKeyMapInput)(nil)).Elem(), SshKeyMap{}) + pulumi.RegisterOutputType(SshKeyOutput{}) + pulumi.RegisterOutputType(SshKeyArrayOutput{}) + pulumi.RegisterOutputType(SshKeyMapOutput{}) +} diff --git a/sdk/nodejs/.gitattributes b/sdk/nodejs/.gitattributes new file mode 100644 index 0000000..aae64e2 --- /dev/null +++ b/sdk/nodejs/.gitattributes @@ -0,0 +1 @@ +* linguist-generated diff --git a/sdk/nodejs/.gitignore b/sdk/nodejs/.gitignore new file mode 100644 index 0000000..204ade5 --- /dev/null +++ b/sdk/nodejs/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +bin/ diff --git a/sdk/nodejs/Pulumi.yaml b/sdk/nodejs/Pulumi.yaml new file mode 100644 index 0000000..e3bf3be --- /dev/null +++ b/sdk/nodejs/Pulumi.yaml @@ -0,0 +1,3 @@ +name: dokploy +description: A Pulumi resource provider for dokploy. +language: nodejs diff --git a/sdk/nodejs/README.md b/sdk/nodejs/README.md new file mode 100644 index 0000000..c988461 --- /dev/null +++ b/sdk/nodejs/README.md @@ -0,0 +1,4 @@ +> This provider is a derived work of the [Terraform Provider](https://github.com/maxvojtkov/terraform-provider-dokploy) +> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature, +> first check the [`pulumi-dokploy` repo](https://github.com/maxvojtkov/pulumi-dokploy/issues); however, if that doesn't turn up anything, +> please consult the source [`terraform-provider-dokploy` repo](https://github.com/maxvojtkov/terraform-provider-dokploy/issues). diff --git a/sdk/nodejs/application.ts b/sdk/nodejs/application.ts new file mode 100644 index 0000000..a47ce01 --- /dev/null +++ b/sdk/nodejs/application.ts @@ -0,0 +1,1408 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Application extends pulumi.CustomResource { + /** + * Get an existing Application 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. + */ + public static get(name: string, id: pulumi.Input, state?: ApplicationState, opts?: pulumi.CustomResourceOptions): Application { + return new Application(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/application:Application'; + + /** + * Returns true if the given object is an instance of Application. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Application { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Application.__pulumiType; + } + + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + */ + declare public readonly appName: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly applicationStatus: pulumi.Output; + /** + * Arguments appended to the container command. + */ + declare public readonly args: pulumi.Output; + /** + * Deploy automatically when the configured trigger fires. + */ + declare public readonly autoDeploy: pulumi.Output; + /** + * Bitbucket branch to build. + */ + declare public readonly bitbucketBranch: pulumi.Output; + /** + * Path within the Bitbucket repository to build from. + */ + declare public readonly bitbucketBuildPath: pulumi.Output; + /** + * ID of the configured Bitbucket provider connection. + */ + declare public readonly bitbucketId: pulumi.Output; + /** + * Bitbucket repository owner. + */ + declare public readonly bitbucketOwner: pulumi.Output; + /** + * Bitbucket repository name. + */ + declare public readonly bitbucketRepository: pulumi.Output; + /** + * Bitbucket repository slug. + */ + declare public readonly bitbucketRepositorySlug: pulumi.Output; + /** + * GitHub branch to build. + */ + declare public readonly branch: pulumi.Output; + /** + * Docker build arguments in `KEY=value` format, one per line. + */ + declare public readonly buildArgs: pulumi.Output; + /** + * Path within the GitHub repository to build from. + */ + declare public readonly buildPath: pulumi.Output; + /** + * Registry used by a dedicated build server. + */ + declare public readonly buildRegistryId: pulumi.Output; + /** + * Docker build secrets in `KEY=value` format, one per line. + */ + declare public readonly buildSecrets: pulumi.Output; + /** + * Server that performs builds, when separate from the deploy server. + */ + declare public readonly buildServerId: pulumi.Output; + /** + * How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + */ + declare public readonly buildType: pulumi.Output; + /** + * Discard the build cache on the next deployment. + */ + declare public readonly cleanCache: pulumi.Output; + /** + * Override the container entrypoint command. + */ + declare public readonly command: pulumi.Output; + /** + * Hard CPU limit, for example `1`. + */ + declare public readonly cpuLimit: pulumi.Output; + /** + * Soft CPU reservation, for example `0.5`. + */ + declare public readonly cpuReservation: pulumi.Output; + /** + * Write the environment variables to a `.env` file in the container. + */ + declare public readonly createEnvFile: pulumi.Output; + /** + * RFC 3339 timestamp of when the application was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Branch to build for a custom Git remote. + */ + declare public readonly customGitBranch: pulumi.Output; + /** + * Path within a custom Git repository to build from. + */ + declare public readonly customGitBuildPath: pulumi.Output; + /** + * SSH key used to clone a private custom Git remote. + */ + declare public readonly customGitSshKeyId: pulumi.Output; + /** + * Git remote URL, when `sourceType` is `git`. + */ + declare public readonly customGitUrl: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Detach the service from the shared `dokploy-network`. + */ + declare public readonly detachDokployNetwork: pulumi.Output; + /** + * Target stage for a multi-stage Docker build. + */ + declare public readonly dockerBuildStage: pulumi.Output; + /** + * Docker build context path. + */ + declare public readonly dockerContextPath: pulumi.Output; + /** + * Docker image reference, when `sourceType` is `docker`. + */ + declare public readonly dockerImage: pulumi.Output; + /** + * Path to the Dockerfile, when `buildType` is `dockerfile`. + */ + declare public readonly dockerfile: pulumi.Output; + /** + * Clone Git submodules when checking out the repository. + */ + declare public readonly enableSubmodules: pulumi.Output; + /** + * Whether the application is enabled. + */ + declare public readonly enabled: pulumi.Output; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + declare public readonly endpointSpecSwarm: pulumi.Output; + /** + * Runtime environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this application belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Gitea branch to build. + */ + declare public readonly giteaBranch: pulumi.Output; + /** + * Path within the Gitea repository to build from. + */ + declare public readonly giteaBuildPath: pulumi.Output; + /** + * ID of the configured Gitea provider connection. + */ + declare public readonly giteaId: pulumi.Output; + /** + * Gitea repository owner. + */ + declare public readonly giteaOwner: pulumi.Output; + /** + * Gitea repository name. + */ + declare public readonly giteaRepository: pulumi.Output; + /** + * ID of the configured GitHub provider connection. + */ + declare public readonly githubId: pulumi.Output; + /** + * GitLab branch to build. + */ + declare public readonly gitlabBranch: pulumi.Output; + /** + * Path within the GitLab repository to build from. + */ + declare public readonly gitlabBuildPath: pulumi.Output; + /** + * ID of the configured GitLab provider connection. + */ + declare public readonly gitlabId: pulumi.Output; + /** + * GitLab repository owner. + */ + declare public readonly gitlabOwner: pulumi.Output; + /** + * Full GitLab namespace path. + */ + declare public readonly gitlabPathNamespace: pulumi.Output; + /** + * Numeric GitLab project ID. + */ + declare public readonly gitlabProjectId: pulumi.Output; + /** + * GitLab repository name. + */ + declare public readonly gitlabRepository: pulumi.Output; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + declare public readonly healthCheckSwarm: pulumi.Output; + /** + * Heroku buildpack stack version. + */ + declare public readonly herokuVersion: pulumi.Output; + /** + * Build a preview deployment for each pull request. + */ + declare public readonly isPreviewDeploymentsActive: pulumi.Output; + /** + * Serve a static build as a single-page application. + */ + declare public readonly isStaticSpa: pulumi.Output; + /** + * Docker Swarm service labels, as a JSON object. + */ + declare public readonly labelsSwarm: pulumi.Output; + /** + * Hard memory limit, for example `512m`. + */ + declare public readonly memoryLimit: pulumi.Output; + /** + * Soft memory reservation, for example `256m`. + */ + declare public readonly memoryReservation: pulumi.Output; + /** + * Docker Swarm service mode, as a JSON object. + */ + declare public readonly modeSwarm: pulumi.Output; + /** + * Display name of the application. + */ + declare public readonly name: pulumi.Output; + /** + * IDs of additional Docker networks to attach. + */ + declare public readonly networkIds: pulumi.Output; + /** + * Docker Swarm network attachments, as a JSON array. + */ + declare public readonly networkSwarm: pulumi.Output; + /** + * GitHub repository owner. + */ + declare public readonly owner: pulumi.Output; + /** + * Registry password, when pulling a private image. + */ + declare public readonly password: pulumi.Output; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + declare public readonly placementSwarm: pulumi.Output; + /** + * Build arguments applied to preview deployments. + */ + declare public readonly previewBuildArgs: pulumi.Output; + /** + * Build secrets applied to preview deployments. + */ + declare public readonly previewBuildSecrets: pulumi.Output; + /** + * Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + */ + declare public readonly previewCertificateType: pulumi.Output; + /** + * Traefik certificate resolver for preview deployments. + */ + declare public readonly previewCustomCertResolver: pulumi.Output; + /** + * Environment variables applied to preview deployments. + */ + declare public readonly previewEnv: pulumi.Output; + /** + * Serve preview deployments over HTTPS. + */ + declare public readonly previewHttps: pulumi.Output; + /** + * Pull request labels that opt into preview deployments. + */ + declare public readonly previewLabels: pulumi.Output; + /** + * Maximum number of concurrent preview deployments. + */ + declare public readonly previewLimit: pulumi.Output; + /** + * Base path for preview deployments. + */ + declare public readonly previewPath: pulumi.Output; + /** + * Container port exposed by preview deployments. + */ + declare public readonly previewPort: pulumi.Output; + /** + * Wildcard domain used to expose preview deployments. + */ + declare public readonly previewWildcard: pulumi.Output; + /** + * Directory served when `buildType` is `static`. + */ + declare public readonly publishDirectory: pulumi.Output; + /** + * Railpack version. + */ + declare public readonly railpackVersion: pulumi.Output; + /** + * Registry used to push the built image. + */ + declare public readonly registryId: pulumi.Output; + /** + * Registry URL, when pulling a private image. + */ + declare public readonly registryUrl: pulumi.Output; + /** + * Number of replicas to run. + */ + declare public readonly replicas: pulumi.Output; + /** + * GitHub repository name. + */ + declare public readonly repository: pulumi.Output; + /** + * Docker Swarm restart policy, as a JSON object. + */ + declare public readonly restartPolicySwarm: pulumi.Output; + /** + * Keep previous images so deployments can be rolled back. + */ + declare public readonly rollbackActive: pulumi.Output; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + declare public readonly rollbackConfigSwarm: pulumi.Output; + /** + * Registry used to store rollback images. + */ + declare public readonly rollbackRegistryId: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + */ + declare public readonly sourceType: pulumi.Output; + /** + * Grace period in nanoseconds before a container is killed. + */ + declare public readonly stopGracePeriodSwarm: pulumi.Output; + /** + * Display subtitle shown in the Dokploy UI. + */ + declare public readonly subtitle: pulumi.Output; + /** + * Display title shown in the Dokploy UI. + */ + declare public readonly title: pulumi.Output; + /** + * What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + */ + declare public readonly triggerType: pulumi.Output; + /** + * Docker Swarm ulimits, as a JSON object. + */ + declare public readonly ulimitsSwarm: pulumi.Output; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + declare public readonly updateConfigSwarm: pulumi.Output; + /** + * Registry username, when pulling a private image. + */ + declare public readonly username: pulumi.Output; + /** + * Glob patterns that limit which changed paths trigger an automatic deployment. + */ + declare public readonly watchPaths: pulumi.Output; + + /** + * Create a Application 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. + */ + constructor(name: string, args: ApplicationArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ApplicationArgs | ApplicationState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ApplicationState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["applicationStatus"] = state?.applicationStatus; + resourceInputs["args"] = state?.args; + resourceInputs["autoDeploy"] = state?.autoDeploy; + resourceInputs["bitbucketBranch"] = state?.bitbucketBranch; + resourceInputs["bitbucketBuildPath"] = state?.bitbucketBuildPath; + resourceInputs["bitbucketId"] = state?.bitbucketId; + resourceInputs["bitbucketOwner"] = state?.bitbucketOwner; + resourceInputs["bitbucketRepository"] = state?.bitbucketRepository; + resourceInputs["bitbucketRepositorySlug"] = state?.bitbucketRepositorySlug; + resourceInputs["branch"] = state?.branch; + resourceInputs["buildArgs"] = state?.buildArgs; + resourceInputs["buildPath"] = state?.buildPath; + resourceInputs["buildRegistryId"] = state?.buildRegistryId; + resourceInputs["buildSecrets"] = state?.buildSecrets; + resourceInputs["buildServerId"] = state?.buildServerId; + resourceInputs["buildType"] = state?.buildType; + resourceInputs["cleanCache"] = state?.cleanCache; + resourceInputs["command"] = state?.command; + resourceInputs["cpuLimit"] = state?.cpuLimit; + resourceInputs["cpuReservation"] = state?.cpuReservation; + resourceInputs["createEnvFile"] = state?.createEnvFile; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["customGitBranch"] = state?.customGitBranch; + resourceInputs["customGitBuildPath"] = state?.customGitBuildPath; + resourceInputs["customGitSshKeyId"] = state?.customGitSshKeyId; + resourceInputs["customGitUrl"] = state?.customGitUrl; + resourceInputs["description"] = state?.description; + resourceInputs["detachDokployNetwork"] = state?.detachDokployNetwork; + resourceInputs["dockerBuildStage"] = state?.dockerBuildStage; + resourceInputs["dockerContextPath"] = state?.dockerContextPath; + resourceInputs["dockerImage"] = state?.dockerImage; + resourceInputs["dockerfile"] = state?.dockerfile; + resourceInputs["enableSubmodules"] = state?.enableSubmodules; + resourceInputs["enabled"] = state?.enabled; + resourceInputs["endpointSpecSwarm"] = state?.endpointSpecSwarm; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["giteaBranch"] = state?.giteaBranch; + resourceInputs["giteaBuildPath"] = state?.giteaBuildPath; + resourceInputs["giteaId"] = state?.giteaId; + resourceInputs["giteaOwner"] = state?.giteaOwner; + resourceInputs["giteaRepository"] = state?.giteaRepository; + resourceInputs["githubId"] = state?.githubId; + resourceInputs["gitlabBranch"] = state?.gitlabBranch; + resourceInputs["gitlabBuildPath"] = state?.gitlabBuildPath; + resourceInputs["gitlabId"] = state?.gitlabId; + resourceInputs["gitlabOwner"] = state?.gitlabOwner; + resourceInputs["gitlabPathNamespace"] = state?.gitlabPathNamespace; + resourceInputs["gitlabProjectId"] = state?.gitlabProjectId; + resourceInputs["gitlabRepository"] = state?.gitlabRepository; + resourceInputs["healthCheckSwarm"] = state?.healthCheckSwarm; + resourceInputs["herokuVersion"] = state?.herokuVersion; + resourceInputs["isPreviewDeploymentsActive"] = state?.isPreviewDeploymentsActive; + resourceInputs["isStaticSpa"] = state?.isStaticSpa; + resourceInputs["labelsSwarm"] = state?.labelsSwarm; + resourceInputs["memoryLimit"] = state?.memoryLimit; + resourceInputs["memoryReservation"] = state?.memoryReservation; + resourceInputs["modeSwarm"] = state?.modeSwarm; + resourceInputs["name"] = state?.name; + resourceInputs["networkIds"] = state?.networkIds; + resourceInputs["networkSwarm"] = state?.networkSwarm; + resourceInputs["owner"] = state?.owner; + resourceInputs["password"] = state?.password; + resourceInputs["placementSwarm"] = state?.placementSwarm; + resourceInputs["previewBuildArgs"] = state?.previewBuildArgs; + resourceInputs["previewBuildSecrets"] = state?.previewBuildSecrets; + resourceInputs["previewCertificateType"] = state?.previewCertificateType; + resourceInputs["previewCustomCertResolver"] = state?.previewCustomCertResolver; + resourceInputs["previewEnv"] = state?.previewEnv; + resourceInputs["previewHttps"] = state?.previewHttps; + resourceInputs["previewLabels"] = state?.previewLabels; + resourceInputs["previewLimit"] = state?.previewLimit; + resourceInputs["previewPath"] = state?.previewPath; + resourceInputs["previewPort"] = state?.previewPort; + resourceInputs["previewWildcard"] = state?.previewWildcard; + resourceInputs["publishDirectory"] = state?.publishDirectory; + resourceInputs["railpackVersion"] = state?.railpackVersion; + resourceInputs["registryId"] = state?.registryId; + resourceInputs["registryUrl"] = state?.registryUrl; + resourceInputs["replicas"] = state?.replicas; + resourceInputs["repository"] = state?.repository; + resourceInputs["restartPolicySwarm"] = state?.restartPolicySwarm; + resourceInputs["rollbackActive"] = state?.rollbackActive; + resourceInputs["rollbackConfigSwarm"] = state?.rollbackConfigSwarm; + resourceInputs["rollbackRegistryId"] = state?.rollbackRegistryId; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["sourceType"] = state?.sourceType; + resourceInputs["stopGracePeriodSwarm"] = state?.stopGracePeriodSwarm; + resourceInputs["subtitle"] = state?.subtitle; + resourceInputs["title"] = state?.title; + resourceInputs["triggerType"] = state?.triggerType; + resourceInputs["ulimitsSwarm"] = state?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = state?.updateConfigSwarm; + resourceInputs["username"] = state?.username; + resourceInputs["watchPaths"] = state?.watchPaths; + } else { + const args = argsOrState as ApplicationArgs | undefined; + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["args"] = args?.args; + resourceInputs["autoDeploy"] = args?.autoDeploy; + resourceInputs["bitbucketBranch"] = args?.bitbucketBranch; + resourceInputs["bitbucketBuildPath"] = args?.bitbucketBuildPath; + resourceInputs["bitbucketId"] = args?.bitbucketId; + resourceInputs["bitbucketOwner"] = args?.bitbucketOwner; + resourceInputs["bitbucketRepository"] = args?.bitbucketRepository; + resourceInputs["bitbucketRepositorySlug"] = args?.bitbucketRepositorySlug; + resourceInputs["branch"] = args?.branch; + resourceInputs["buildArgs"] = args?.buildArgs; + resourceInputs["buildPath"] = args?.buildPath; + resourceInputs["buildRegistryId"] = args?.buildRegistryId; + resourceInputs["buildSecrets"] = args?.buildSecrets ? pulumi.secret(args.buildSecrets) : undefined; + resourceInputs["buildServerId"] = args?.buildServerId; + resourceInputs["buildType"] = args?.buildType; + resourceInputs["cleanCache"] = args?.cleanCache; + resourceInputs["command"] = args?.command; + resourceInputs["cpuLimit"] = args?.cpuLimit; + resourceInputs["cpuReservation"] = args?.cpuReservation; + resourceInputs["createEnvFile"] = args?.createEnvFile; + resourceInputs["customGitBranch"] = args?.customGitBranch; + resourceInputs["customGitBuildPath"] = args?.customGitBuildPath; + resourceInputs["customGitSshKeyId"] = args?.customGitSshKeyId; + resourceInputs["customGitUrl"] = args?.customGitUrl; + resourceInputs["description"] = args?.description; + resourceInputs["detachDokployNetwork"] = args?.detachDokployNetwork; + resourceInputs["dockerBuildStage"] = args?.dockerBuildStage; + resourceInputs["dockerContextPath"] = args?.dockerContextPath; + resourceInputs["dockerImage"] = args?.dockerImage; + resourceInputs["dockerfile"] = args?.dockerfile; + resourceInputs["enableSubmodules"] = args?.enableSubmodules; + resourceInputs["enabled"] = args?.enabled; + resourceInputs["endpointSpecSwarm"] = args?.endpointSpecSwarm; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["giteaBranch"] = args?.giteaBranch; + resourceInputs["giteaBuildPath"] = args?.giteaBuildPath; + resourceInputs["giteaId"] = args?.giteaId; + resourceInputs["giteaOwner"] = args?.giteaOwner; + resourceInputs["giteaRepository"] = args?.giteaRepository; + resourceInputs["githubId"] = args?.githubId; + resourceInputs["gitlabBranch"] = args?.gitlabBranch; + resourceInputs["gitlabBuildPath"] = args?.gitlabBuildPath; + resourceInputs["gitlabId"] = args?.gitlabId; + resourceInputs["gitlabOwner"] = args?.gitlabOwner; + resourceInputs["gitlabPathNamespace"] = args?.gitlabPathNamespace; + resourceInputs["gitlabProjectId"] = args?.gitlabProjectId; + resourceInputs["gitlabRepository"] = args?.gitlabRepository; + resourceInputs["healthCheckSwarm"] = args?.healthCheckSwarm; + resourceInputs["herokuVersion"] = args?.herokuVersion; + resourceInputs["isPreviewDeploymentsActive"] = args?.isPreviewDeploymentsActive; + resourceInputs["isStaticSpa"] = args?.isStaticSpa; + resourceInputs["labelsSwarm"] = args?.labelsSwarm; + resourceInputs["memoryLimit"] = args?.memoryLimit; + resourceInputs["memoryReservation"] = args?.memoryReservation; + resourceInputs["modeSwarm"] = args?.modeSwarm; + resourceInputs["name"] = args?.name; + resourceInputs["networkIds"] = args?.networkIds; + resourceInputs["networkSwarm"] = args?.networkSwarm; + resourceInputs["owner"] = args?.owner; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; + resourceInputs["placementSwarm"] = args?.placementSwarm; + resourceInputs["previewBuildArgs"] = args?.previewBuildArgs; + resourceInputs["previewBuildSecrets"] = args?.previewBuildSecrets ? pulumi.secret(args.previewBuildSecrets) : undefined; + resourceInputs["previewCertificateType"] = args?.previewCertificateType; + resourceInputs["previewCustomCertResolver"] = args?.previewCustomCertResolver; + resourceInputs["previewEnv"] = args?.previewEnv; + resourceInputs["previewHttps"] = args?.previewHttps; + resourceInputs["previewLabels"] = args?.previewLabels; + resourceInputs["previewLimit"] = args?.previewLimit; + resourceInputs["previewPath"] = args?.previewPath; + resourceInputs["previewPort"] = args?.previewPort; + resourceInputs["previewWildcard"] = args?.previewWildcard; + resourceInputs["publishDirectory"] = args?.publishDirectory; + resourceInputs["railpackVersion"] = args?.railpackVersion; + resourceInputs["registryId"] = args?.registryId; + resourceInputs["registryUrl"] = args?.registryUrl; + resourceInputs["replicas"] = args?.replicas; + resourceInputs["repository"] = args?.repository; + resourceInputs["restartPolicySwarm"] = args?.restartPolicySwarm; + resourceInputs["rollbackActive"] = args?.rollbackActive; + resourceInputs["rollbackConfigSwarm"] = args?.rollbackConfigSwarm; + resourceInputs["rollbackRegistryId"] = args?.rollbackRegistryId; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["sourceType"] = args?.sourceType; + resourceInputs["stopGracePeriodSwarm"] = args?.stopGracePeriodSwarm; + resourceInputs["subtitle"] = args?.subtitle; + resourceInputs["title"] = args?.title; + resourceInputs["triggerType"] = args?.triggerType; + resourceInputs["ulimitsSwarm"] = args?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = args?.updateConfigSwarm; + resourceInputs["username"] = args?.username; + resourceInputs["watchPaths"] = args?.watchPaths; + resourceInputs["applicationStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["buildSecrets", "password", "previewBuildSecrets"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Application.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Application resources. + */ +export interface ApplicationState { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + */ + appName?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + applicationStatus?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Deploy automatically when the configured trigger fires. + */ + autoDeploy?: pulumi.Input; + /** + * Bitbucket branch to build. + */ + bitbucketBranch?: pulumi.Input; + /** + * Path within the Bitbucket repository to build from. + */ + bitbucketBuildPath?: pulumi.Input; + /** + * ID of the configured Bitbucket provider connection. + */ + bitbucketId?: pulumi.Input; + /** + * Bitbucket repository owner. + */ + bitbucketOwner?: pulumi.Input; + /** + * Bitbucket repository name. + */ + bitbucketRepository?: pulumi.Input; + /** + * Bitbucket repository slug. + */ + bitbucketRepositorySlug?: pulumi.Input; + /** + * GitHub branch to build. + */ + branch?: pulumi.Input; + /** + * Docker build arguments in `KEY=value` format, one per line. + */ + buildArgs?: pulumi.Input; + /** + * Path within the GitHub repository to build from. + */ + buildPath?: pulumi.Input; + /** + * Registry used by a dedicated build server. + */ + buildRegistryId?: pulumi.Input; + /** + * Docker build secrets in `KEY=value` format, one per line. + */ + buildSecrets?: pulumi.Input; + /** + * Server that performs builds, when separate from the deploy server. + */ + buildServerId?: pulumi.Input; + /** + * How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + */ + buildType?: pulumi.Input; + /** + * Discard the build cache on the next deployment. + */ + cleanCache?: pulumi.Input; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Write the environment variables to a `.env` file in the container. + */ + createEnvFile?: pulumi.Input; + /** + * RFC 3339 timestamp of when the application was created. + */ + createdAt?: pulumi.Input; + /** + * Branch to build for a custom Git remote. + */ + customGitBranch?: pulumi.Input; + /** + * Path within a custom Git repository to build from. + */ + customGitBuildPath?: pulumi.Input; + /** + * SSH key used to clone a private custom Git remote. + */ + customGitSshKeyId?: pulumi.Input; + /** + * Git remote URL, when `sourceType` is `git`. + */ + customGitUrl?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * Target stage for a multi-stage Docker build. + */ + dockerBuildStage?: pulumi.Input; + /** + * Docker build context path. + */ + dockerContextPath?: pulumi.Input; + /** + * Docker image reference, when `sourceType` is `docker`. + */ + dockerImage?: pulumi.Input; + /** + * Path to the Dockerfile, when `buildType` is `dockerfile`. + */ + dockerfile?: pulumi.Input; + /** + * Clone Git submodules when checking out the repository. + */ + enableSubmodules?: pulumi.Input; + /** + * Whether the application is enabled. + */ + enabled?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Runtime environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this application belongs to. + */ + environmentId?: pulumi.Input; + /** + * Gitea branch to build. + */ + giteaBranch?: pulumi.Input; + /** + * Path within the Gitea repository to build from. + */ + giteaBuildPath?: pulumi.Input; + /** + * ID of the configured Gitea provider connection. + */ + giteaId?: pulumi.Input; + /** + * Gitea repository owner. + */ + giteaOwner?: pulumi.Input; + /** + * Gitea repository name. + */ + giteaRepository?: pulumi.Input; + /** + * ID of the configured GitHub provider connection. + */ + githubId?: pulumi.Input; + /** + * GitLab branch to build. + */ + gitlabBranch?: pulumi.Input; + /** + * Path within the GitLab repository to build from. + */ + gitlabBuildPath?: pulumi.Input; + /** + * ID of the configured GitLab provider connection. + */ + gitlabId?: pulumi.Input; + /** + * GitLab repository owner. + */ + gitlabOwner?: pulumi.Input; + /** + * Full GitLab namespace path. + */ + gitlabPathNamespace?: pulumi.Input; + /** + * Numeric GitLab project ID. + */ + gitlabProjectId?: pulumi.Input; + /** + * GitLab repository name. + */ + gitlabRepository?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Heroku buildpack stack version. + */ + herokuVersion?: pulumi.Input; + /** + * Build a preview deployment for each pull request. + */ + isPreviewDeploymentsActive?: pulumi.Input; + /** + * Serve a static build as a single-page application. + */ + isStaticSpa?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the application. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * GitHub repository owner. + */ + owner?: pulumi.Input; + /** + * Registry password, when pulling a private image. + */ + password?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Build arguments applied to preview deployments. + */ + previewBuildArgs?: pulumi.Input; + /** + * Build secrets applied to preview deployments. + */ + previewBuildSecrets?: pulumi.Input; + /** + * Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + */ + previewCertificateType?: pulumi.Input; + /** + * Traefik certificate resolver for preview deployments. + */ + previewCustomCertResolver?: pulumi.Input; + /** + * Environment variables applied to preview deployments. + */ + previewEnv?: pulumi.Input; + /** + * Serve preview deployments over HTTPS. + */ + previewHttps?: pulumi.Input; + /** + * Pull request labels that opt into preview deployments. + */ + previewLabels?: pulumi.Input[]>; + /** + * Maximum number of concurrent preview deployments. + */ + previewLimit?: pulumi.Input; + /** + * Base path for preview deployments. + */ + previewPath?: pulumi.Input; + /** + * Container port exposed by preview deployments. + */ + previewPort?: pulumi.Input; + /** + * Wildcard domain used to expose preview deployments. + */ + previewWildcard?: pulumi.Input; + /** + * Directory served when `buildType` is `static`. + */ + publishDirectory?: pulumi.Input; + /** + * Railpack version. + */ + railpackVersion?: pulumi.Input; + /** + * Registry used to push the built image. + */ + registryId?: pulumi.Input; + /** + * Registry URL, when pulling a private image. + */ + registryUrl?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * GitHub repository name. + */ + repository?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Keep previous images so deployments can be rolled back. + */ + rollbackActive?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Registry used to store rollback images. + */ + rollbackRegistryId?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + */ + sourceType?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Display subtitle shown in the Dokploy UI. + */ + subtitle?: pulumi.Input; + /** + * Display title shown in the Dokploy UI. + */ + title?: pulumi.Input; + /** + * What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + */ + triggerType?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; + /** + * Registry username, when pulling a private image. + */ + username?: pulumi.Input; + /** + * Glob patterns that limit which changed paths trigger an automatic deployment. + */ + watchPaths?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a Application resource. + */ +export interface ApplicationArgs { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + */ + appName?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Deploy automatically when the configured trigger fires. + */ + autoDeploy?: pulumi.Input; + /** + * Bitbucket branch to build. + */ + bitbucketBranch?: pulumi.Input; + /** + * Path within the Bitbucket repository to build from. + */ + bitbucketBuildPath?: pulumi.Input; + /** + * ID of the configured Bitbucket provider connection. + */ + bitbucketId?: pulumi.Input; + /** + * Bitbucket repository owner. + */ + bitbucketOwner?: pulumi.Input; + /** + * Bitbucket repository name. + */ + bitbucketRepository?: pulumi.Input; + /** + * Bitbucket repository slug. + */ + bitbucketRepositorySlug?: pulumi.Input; + /** + * GitHub branch to build. + */ + branch?: pulumi.Input; + /** + * Docker build arguments in `KEY=value` format, one per line. + */ + buildArgs?: pulumi.Input; + /** + * Path within the GitHub repository to build from. + */ + buildPath?: pulumi.Input; + /** + * Registry used by a dedicated build server. + */ + buildRegistryId?: pulumi.Input; + /** + * Docker build secrets in `KEY=value` format, one per line. + */ + buildSecrets?: pulumi.Input; + /** + * Server that performs builds, when separate from the deploy server. + */ + buildServerId?: pulumi.Input; + /** + * How the application is built. Valid values: `dockerfile`, `herokuBuildpacks`, `paketoBuildpacks`, `nixpacks`, `static`, `railpack`. + */ + buildType?: pulumi.Input; + /** + * Discard the build cache on the next deployment. + */ + cleanCache?: pulumi.Input; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Write the environment variables to a `.env` file in the container. + */ + createEnvFile?: pulumi.Input; + /** + * Branch to build for a custom Git remote. + */ + customGitBranch?: pulumi.Input; + /** + * Path within a custom Git repository to build from. + */ + customGitBuildPath?: pulumi.Input; + /** + * SSH key used to clone a private custom Git remote. + */ + customGitSshKeyId?: pulumi.Input; + /** + * Git remote URL, when `sourceType` is `git`. + */ + customGitUrl?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * Target stage for a multi-stage Docker build. + */ + dockerBuildStage?: pulumi.Input; + /** + * Docker build context path. + */ + dockerContextPath?: pulumi.Input; + /** + * Docker image reference, when `sourceType` is `docker`. + */ + dockerImage?: pulumi.Input; + /** + * Path to the Dockerfile, when `buildType` is `dockerfile`. + */ + dockerfile?: pulumi.Input; + /** + * Clone Git submodules when checking out the repository. + */ + enableSubmodules?: pulumi.Input; + /** + * Whether the application is enabled. + */ + enabled?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Runtime environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this application belongs to. + */ + environmentId: pulumi.Input; + /** + * Gitea branch to build. + */ + giteaBranch?: pulumi.Input; + /** + * Path within the Gitea repository to build from. + */ + giteaBuildPath?: pulumi.Input; + /** + * ID of the configured Gitea provider connection. + */ + giteaId?: pulumi.Input; + /** + * Gitea repository owner. + */ + giteaOwner?: pulumi.Input; + /** + * Gitea repository name. + */ + giteaRepository?: pulumi.Input; + /** + * ID of the configured GitHub provider connection. + */ + githubId?: pulumi.Input; + /** + * GitLab branch to build. + */ + gitlabBranch?: pulumi.Input; + /** + * Path within the GitLab repository to build from. + */ + gitlabBuildPath?: pulumi.Input; + /** + * ID of the configured GitLab provider connection. + */ + gitlabId?: pulumi.Input; + /** + * GitLab repository owner. + */ + gitlabOwner?: pulumi.Input; + /** + * Full GitLab namespace path. + */ + gitlabPathNamespace?: pulumi.Input; + /** + * Numeric GitLab project ID. + */ + gitlabProjectId?: pulumi.Input; + /** + * GitLab repository name. + */ + gitlabRepository?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Heroku buildpack stack version. + */ + herokuVersion?: pulumi.Input; + /** + * Build a preview deployment for each pull request. + */ + isPreviewDeploymentsActive?: pulumi.Input; + /** + * Serve a static build as a single-page application. + */ + isStaticSpa?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the application. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * GitHub repository owner. + */ + owner?: pulumi.Input; + /** + * Registry password, when pulling a private image. + */ + password?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Build arguments applied to preview deployments. + */ + previewBuildArgs?: pulumi.Input; + /** + * Build secrets applied to preview deployments. + */ + previewBuildSecrets?: pulumi.Input; + /** + * Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + */ + previewCertificateType?: pulumi.Input; + /** + * Traefik certificate resolver for preview deployments. + */ + previewCustomCertResolver?: pulumi.Input; + /** + * Environment variables applied to preview deployments. + */ + previewEnv?: pulumi.Input; + /** + * Serve preview deployments over HTTPS. + */ + previewHttps?: pulumi.Input; + /** + * Pull request labels that opt into preview deployments. + */ + previewLabels?: pulumi.Input[]>; + /** + * Maximum number of concurrent preview deployments. + */ + previewLimit?: pulumi.Input; + /** + * Base path for preview deployments. + */ + previewPath?: pulumi.Input; + /** + * Container port exposed by preview deployments. + */ + previewPort?: pulumi.Input; + /** + * Wildcard domain used to expose preview deployments. + */ + previewWildcard?: pulumi.Input; + /** + * Directory served when `buildType` is `static`. + */ + publishDirectory?: pulumi.Input; + /** + * Railpack version. + */ + railpackVersion?: pulumi.Input; + /** + * Registry used to push the built image. + */ + registryId?: pulumi.Input; + /** + * Registry URL, when pulling a private image. + */ + registryUrl?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * GitHub repository name. + */ + repository?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Keep previous images so deployments can be rolled back. + */ + rollbackActive?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Registry used to store rollback images. + */ + rollbackRegistryId?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + */ + sourceType?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Display subtitle shown in the Dokploy UI. + */ + subtitle?: pulumi.Input; + /** + * Display title shown in the Dokploy UI. + */ + title?: pulumi.Input; + /** + * What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + */ + triggerType?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; + /** + * Registry username, when pulling a private image. + */ + username?: pulumi.Input; + /** + * Glob patterns that limit which changed paths trigger an automatic deployment. + */ + watchPaths?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/certificate.ts b/sdk/nodejs/certificate.ts new file mode 100644 index 0000000..088b012 --- /dev/null +++ b/sdk/nodejs/certificate.ts @@ -0,0 +1,155 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Certificate extends pulumi.CustomResource { + /** + * Get an existing Certificate 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. + */ + public static get(name: string, id: pulumi.Input, state?: CertificateState, opts?: pulumi.CustomResourceOptions): Certificate { + return new Certificate(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/certificate:Certificate'; + + /** + * Returns true if the given object is an instance of Certificate. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Certificate { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Certificate.__pulumiType; + } + + /** + * Whether Dokploy should renew this certificate automatically. + */ + declare public readonly autoRenew: pulumi.Output; + /** + * PEM-encoded certificate chain. + */ + declare public readonly certificateData: pulumi.Output; + /** + * Path where Dokploy writes the certificate on disk. + */ + declare public /*out*/ readonly certificatePath: pulumi.Output; + /** + * Display name of the certificate. + */ + declare public readonly name: pulumi.Output; + /** + * PEM-encoded private key. + */ + declare public readonly privateKey: pulumi.Output; + /** + * Server this certificate is installed on. + */ + declare public readonly serverId: pulumi.Output; + + /** + * Create a Certificate 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. + */ + constructor(name: string, args: CertificateArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: CertificateArgs | CertificateState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as CertificateState | undefined; + resourceInputs["autoRenew"] = state?.autoRenew; + resourceInputs["certificateData"] = state?.certificateData; + resourceInputs["certificatePath"] = state?.certificatePath; + resourceInputs["name"] = state?.name; + resourceInputs["privateKey"] = state?.privateKey; + resourceInputs["serverId"] = state?.serverId; + } else { + const args = argsOrState as CertificateArgs | undefined; + if (args?.certificateData === undefined && !opts.urn) { + throw new Error("Missing required property 'certificateData'"); + } + if (args?.privateKey === undefined && !opts.urn) { + throw new Error("Missing required property 'privateKey'"); + } + resourceInputs["autoRenew"] = args?.autoRenew; + resourceInputs["certificateData"] = args?.certificateData; + resourceInputs["name"] = args?.name; + resourceInputs["privateKey"] = args?.privateKey ? pulumi.secret(args.privateKey) : undefined; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["certificatePath"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["privateKey"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Certificate.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Certificate resources. + */ +export interface CertificateState { + /** + * Whether Dokploy should renew this certificate automatically. + */ + autoRenew?: pulumi.Input; + /** + * PEM-encoded certificate chain. + */ + certificateData?: pulumi.Input; + /** + * Path where Dokploy writes the certificate on disk. + */ + certificatePath?: pulumi.Input; + /** + * Display name of the certificate. + */ + name?: pulumi.Input; + /** + * PEM-encoded private key. + */ + privateKey?: pulumi.Input; + /** + * Server this certificate is installed on. + */ + serverId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Certificate resource. + */ +export interface CertificateArgs { + /** + * Whether Dokploy should renew this certificate automatically. + */ + autoRenew?: pulumi.Input; + /** + * PEM-encoded certificate chain. + */ + certificateData: pulumi.Input; + /** + * Display name of the certificate. + */ + name?: pulumi.Input; + /** + * PEM-encoded private key. + */ + privateKey: pulumi.Input; + /** + * Server this certificate is installed on. + */ + serverId?: pulumi.Input; +} diff --git a/sdk/nodejs/compose.ts b/sdk/nodejs/compose.ts new file mode 100644 index 0000000..1a9000c --- /dev/null +++ b/sdk/nodejs/compose.ts @@ -0,0 +1,678 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Compose extends pulumi.CustomResource { + /** + * Get an existing Compose 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. + */ + public static get(name: string, id: pulumi.Input, state?: ComposeState, opts?: pulumi.CustomResourceOptions): Compose { + return new Compose(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/compose:Compose'; + + /** + * Returns true if the given object is an instance of Compose. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Compose { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Compose.__pulumiType; + } + + /** + * Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + */ + declare public readonly appName: pulumi.Output; + /** + * Deploy automatically when the configured trigger fires. + */ + declare public readonly autoDeploy: pulumi.Output; + /** + * Bitbucket branch to deploy. + */ + declare public readonly bitbucketBranch: pulumi.Output; + /** + * ID of the configured Bitbucket provider connection. + */ + declare public readonly bitbucketId: pulumi.Output; + /** + * Bitbucket repository owner. + */ + declare public readonly bitbucketOwner: pulumi.Output; + /** + * Bitbucket repository name. + */ + declare public readonly bitbucketRepository: pulumi.Output; + /** + * Bitbucket repository slug. + */ + declare public readonly bitbucketRepositorySlug: pulumi.Output; + /** + * GitHub branch to deploy. + */ + declare public readonly branch: pulumi.Output; + /** + * Custom `docker compose` command to run. + */ + declare public readonly command: pulumi.Output; + /** + * Inline Compose file contents. Used when `sourceType` is `raw`. + */ + declare public readonly composeFile: pulumi.Output; + /** + * Path to the Compose file within the repository. + */ + declare public readonly composePath: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly composeStatus: pulumi.Output; + /** + * Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + */ + declare public readonly composeType: pulumi.Output; + /** + * RFC 3339 timestamp of when the stack was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Branch to deploy for a custom Git remote. + */ + declare public readonly customGitBranch: pulumi.Output; + /** + * SSH key used to clone a private custom Git remote. + */ + declare public readonly customGitSshKeyId: pulumi.Output; + /** + * Git remote URL, when `sourceType` is `git`. + */ + declare public readonly customGitUrl: pulumi.Output; + /** + * Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + */ + declare public readonly deleteVolumes: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Clone Git submodules when checking out the repository. + */ + declare public readonly enableSubmodules: pulumi.Output; + /** + * Environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this stack belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Gitea branch to deploy. + */ + declare public readonly giteaBranch: pulumi.Output; + /** + * ID of the configured Gitea provider connection. + */ + declare public readonly giteaId: pulumi.Output; + /** + * Gitea repository owner. + */ + declare public readonly giteaOwner: pulumi.Output; + /** + * Gitea repository name. + */ + declare public readonly giteaRepository: pulumi.Output; + /** + * ID of the configured GitHub provider connection. + */ + declare public readonly githubId: pulumi.Output; + /** + * GitLab branch to deploy. + */ + declare public readonly gitlabBranch: pulumi.Output; + /** + * ID of the configured GitLab provider connection. + */ + declare public readonly gitlabId: pulumi.Output; + /** + * GitLab repository owner. + */ + declare public readonly gitlabOwner: pulumi.Output; + /** + * Full GitLab namespace path. + */ + declare public readonly gitlabPathNamespace: pulumi.Output; + /** + * Numeric GitLab project ID. + */ + declare public readonly gitlabProjectId: pulumi.Output; + /** + * GitLab repository name. + */ + declare public readonly gitlabRepository: pulumi.Output; + /** + * Run the stack on its own isolated Docker network. + */ + declare public readonly isolatedDeployment: pulumi.Output; + /** + * Prefix volume names for isolated deployments. Retained for backwards compatibility. + */ + declare public readonly isolatedDeploymentsVolume: pulumi.Output; + /** + * Display name of the stack. + */ + declare public readonly name: pulumi.Output; + /** + * GitHub repository owner. + */ + declare public readonly owner: pulumi.Output; + /** + * Append a random suffix to service and volume names. + */ + declare public readonly randomize: pulumi.Output; + /** + * GitHub repository name. + */ + declare public readonly repository: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + */ + declare public readonly sourceType: pulumi.Output; + /** + * Suffix appended to generated resource names. + */ + declare public readonly suffix: pulumi.Output; + /** + * What triggers an automatic deployment. Valid values: `push`, `tag`. + */ + declare public readonly triggerType: pulumi.Output; + /** + * Glob patterns that limit which changed paths trigger an automatic deployment. + */ + declare public readonly watchPaths: pulumi.Output; + + /** + * Create a Compose 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. + */ + constructor(name: string, args: ComposeArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ComposeArgs | ComposeState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ComposeState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["autoDeploy"] = state?.autoDeploy; + resourceInputs["bitbucketBranch"] = state?.bitbucketBranch; + resourceInputs["bitbucketId"] = state?.bitbucketId; + resourceInputs["bitbucketOwner"] = state?.bitbucketOwner; + resourceInputs["bitbucketRepository"] = state?.bitbucketRepository; + resourceInputs["bitbucketRepositorySlug"] = state?.bitbucketRepositorySlug; + resourceInputs["branch"] = state?.branch; + resourceInputs["command"] = state?.command; + resourceInputs["composeFile"] = state?.composeFile; + resourceInputs["composePath"] = state?.composePath; + resourceInputs["composeStatus"] = state?.composeStatus; + resourceInputs["composeType"] = state?.composeType; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["customGitBranch"] = state?.customGitBranch; + resourceInputs["customGitSshKeyId"] = state?.customGitSshKeyId; + resourceInputs["customGitUrl"] = state?.customGitUrl; + resourceInputs["deleteVolumes"] = state?.deleteVolumes; + resourceInputs["description"] = state?.description; + resourceInputs["enableSubmodules"] = state?.enableSubmodules; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["giteaBranch"] = state?.giteaBranch; + resourceInputs["giteaId"] = state?.giteaId; + resourceInputs["giteaOwner"] = state?.giteaOwner; + resourceInputs["giteaRepository"] = state?.giteaRepository; + resourceInputs["githubId"] = state?.githubId; + resourceInputs["gitlabBranch"] = state?.gitlabBranch; + resourceInputs["gitlabId"] = state?.gitlabId; + resourceInputs["gitlabOwner"] = state?.gitlabOwner; + resourceInputs["gitlabPathNamespace"] = state?.gitlabPathNamespace; + resourceInputs["gitlabProjectId"] = state?.gitlabProjectId; + resourceInputs["gitlabRepository"] = state?.gitlabRepository; + resourceInputs["isolatedDeployment"] = state?.isolatedDeployment; + resourceInputs["isolatedDeploymentsVolume"] = state?.isolatedDeploymentsVolume; + resourceInputs["name"] = state?.name; + resourceInputs["owner"] = state?.owner; + resourceInputs["randomize"] = state?.randomize; + resourceInputs["repository"] = state?.repository; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["sourceType"] = state?.sourceType; + resourceInputs["suffix"] = state?.suffix; + resourceInputs["triggerType"] = state?.triggerType; + resourceInputs["watchPaths"] = state?.watchPaths; + } else { + const args = argsOrState as ComposeArgs | undefined; + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["autoDeploy"] = args?.autoDeploy; + resourceInputs["bitbucketBranch"] = args?.bitbucketBranch; + resourceInputs["bitbucketId"] = args?.bitbucketId; + resourceInputs["bitbucketOwner"] = args?.bitbucketOwner; + resourceInputs["bitbucketRepository"] = args?.bitbucketRepository; + resourceInputs["bitbucketRepositorySlug"] = args?.bitbucketRepositorySlug; + resourceInputs["branch"] = args?.branch; + resourceInputs["command"] = args?.command; + resourceInputs["composeFile"] = args?.composeFile; + resourceInputs["composePath"] = args?.composePath; + resourceInputs["composeType"] = args?.composeType; + resourceInputs["customGitBranch"] = args?.customGitBranch; + resourceInputs["customGitSshKeyId"] = args?.customGitSshKeyId; + resourceInputs["customGitUrl"] = args?.customGitUrl; + resourceInputs["deleteVolumes"] = args?.deleteVolumes; + resourceInputs["description"] = args?.description; + resourceInputs["enableSubmodules"] = args?.enableSubmodules; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["giteaBranch"] = args?.giteaBranch; + resourceInputs["giteaId"] = args?.giteaId; + resourceInputs["giteaOwner"] = args?.giteaOwner; + resourceInputs["giteaRepository"] = args?.giteaRepository; + resourceInputs["githubId"] = args?.githubId; + resourceInputs["gitlabBranch"] = args?.gitlabBranch; + resourceInputs["gitlabId"] = args?.gitlabId; + resourceInputs["gitlabOwner"] = args?.gitlabOwner; + resourceInputs["gitlabPathNamespace"] = args?.gitlabPathNamespace; + resourceInputs["gitlabProjectId"] = args?.gitlabProjectId; + resourceInputs["gitlabRepository"] = args?.gitlabRepository; + resourceInputs["isolatedDeployment"] = args?.isolatedDeployment; + resourceInputs["isolatedDeploymentsVolume"] = args?.isolatedDeploymentsVolume; + resourceInputs["name"] = args?.name; + resourceInputs["owner"] = args?.owner; + resourceInputs["randomize"] = args?.randomize; + resourceInputs["repository"] = args?.repository; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["sourceType"] = args?.sourceType; + resourceInputs["suffix"] = args?.suffix; + resourceInputs["triggerType"] = args?.triggerType; + resourceInputs["watchPaths"] = args?.watchPaths; + resourceInputs["composeStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Compose.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Compose resources. + */ +export interface ComposeState { + /** + * Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + */ + appName?: pulumi.Input; + /** + * Deploy automatically when the configured trigger fires. + */ + autoDeploy?: pulumi.Input; + /** + * Bitbucket branch to deploy. + */ + bitbucketBranch?: pulumi.Input; + /** + * ID of the configured Bitbucket provider connection. + */ + bitbucketId?: pulumi.Input; + /** + * Bitbucket repository owner. + */ + bitbucketOwner?: pulumi.Input; + /** + * Bitbucket repository name. + */ + bitbucketRepository?: pulumi.Input; + /** + * Bitbucket repository slug. + */ + bitbucketRepositorySlug?: pulumi.Input; + /** + * GitHub branch to deploy. + */ + branch?: pulumi.Input; + /** + * Custom `docker compose` command to run. + */ + command?: pulumi.Input; + /** + * Inline Compose file contents. Used when `sourceType` is `raw`. + */ + composeFile?: pulumi.Input; + /** + * Path to the Compose file within the repository. + */ + composePath?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + composeStatus?: pulumi.Input; + /** + * Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + */ + composeType?: pulumi.Input; + /** + * RFC 3339 timestamp of when the stack was created. + */ + createdAt?: pulumi.Input; + /** + * Branch to deploy for a custom Git remote. + */ + customGitBranch?: pulumi.Input; + /** + * SSH key used to clone a private custom Git remote. + */ + customGitSshKeyId?: pulumi.Input; + /** + * Git remote URL, when `sourceType` is `git`. + */ + customGitUrl?: pulumi.Input; + /** + * Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + */ + deleteVolumes?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Clone Git submodules when checking out the repository. + */ + enableSubmodules?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this stack belongs to. + */ + environmentId?: pulumi.Input; + /** + * Gitea branch to deploy. + */ + giteaBranch?: pulumi.Input; + /** + * ID of the configured Gitea provider connection. + */ + giteaId?: pulumi.Input; + /** + * Gitea repository owner. + */ + giteaOwner?: pulumi.Input; + /** + * Gitea repository name. + */ + giteaRepository?: pulumi.Input; + /** + * ID of the configured GitHub provider connection. + */ + githubId?: pulumi.Input; + /** + * GitLab branch to deploy. + */ + gitlabBranch?: pulumi.Input; + /** + * ID of the configured GitLab provider connection. + */ + gitlabId?: pulumi.Input; + /** + * GitLab repository owner. + */ + gitlabOwner?: pulumi.Input; + /** + * Full GitLab namespace path. + */ + gitlabPathNamespace?: pulumi.Input; + /** + * Numeric GitLab project ID. + */ + gitlabProjectId?: pulumi.Input; + /** + * GitLab repository name. + */ + gitlabRepository?: pulumi.Input; + /** + * Run the stack on its own isolated Docker network. + */ + isolatedDeployment?: pulumi.Input; + /** + * Prefix volume names for isolated deployments. Retained for backwards compatibility. + */ + isolatedDeploymentsVolume?: pulumi.Input; + /** + * Display name of the stack. + */ + name?: pulumi.Input; + /** + * GitHub repository owner. + */ + owner?: pulumi.Input; + /** + * Append a random suffix to service and volume names. + */ + randomize?: pulumi.Input; + /** + * GitHub repository name. + */ + repository?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + */ + sourceType?: pulumi.Input; + /** + * Suffix appended to generated resource names. + */ + suffix?: pulumi.Input; + /** + * What triggers an automatic deployment. Valid values: `push`, `tag`. + */ + triggerType?: pulumi.Input; + /** + * Glob patterns that limit which changed paths trigger an automatic deployment. + */ + watchPaths?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a Compose resource. + */ +export interface ComposeArgs { + /** + * Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + */ + appName?: pulumi.Input; + /** + * Deploy automatically when the configured trigger fires. + */ + autoDeploy?: pulumi.Input; + /** + * Bitbucket branch to deploy. + */ + bitbucketBranch?: pulumi.Input; + /** + * ID of the configured Bitbucket provider connection. + */ + bitbucketId?: pulumi.Input; + /** + * Bitbucket repository owner. + */ + bitbucketOwner?: pulumi.Input; + /** + * Bitbucket repository name. + */ + bitbucketRepository?: pulumi.Input; + /** + * Bitbucket repository slug. + */ + bitbucketRepositorySlug?: pulumi.Input; + /** + * GitHub branch to deploy. + */ + branch?: pulumi.Input; + /** + * Custom `docker compose` command to run. + */ + command?: pulumi.Input; + /** + * Inline Compose file contents. Used when `sourceType` is `raw`. + */ + composeFile?: pulumi.Input; + /** + * Path to the Compose file within the repository. + */ + composePath?: pulumi.Input; + /** + * Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + */ + composeType?: pulumi.Input; + /** + * Branch to deploy for a custom Git remote. + */ + customGitBranch?: pulumi.Input; + /** + * SSH key used to clone a private custom Git remote. + */ + customGitSshKeyId?: pulumi.Input; + /** + * Git remote URL, when `sourceType` is `git`. + */ + customGitUrl?: pulumi.Input; + /** + * Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + */ + deleteVolumes?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Clone Git submodules when checking out the repository. + */ + enableSubmodules?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this stack belongs to. + */ + environmentId: pulumi.Input; + /** + * Gitea branch to deploy. + */ + giteaBranch?: pulumi.Input; + /** + * ID of the configured Gitea provider connection. + */ + giteaId?: pulumi.Input; + /** + * Gitea repository owner. + */ + giteaOwner?: pulumi.Input; + /** + * Gitea repository name. + */ + giteaRepository?: pulumi.Input; + /** + * ID of the configured GitHub provider connection. + */ + githubId?: pulumi.Input; + /** + * GitLab branch to deploy. + */ + gitlabBranch?: pulumi.Input; + /** + * ID of the configured GitLab provider connection. + */ + gitlabId?: pulumi.Input; + /** + * GitLab repository owner. + */ + gitlabOwner?: pulumi.Input; + /** + * Full GitLab namespace path. + */ + gitlabPathNamespace?: pulumi.Input; + /** + * Numeric GitLab project ID. + */ + gitlabProjectId?: pulumi.Input; + /** + * GitLab repository name. + */ + gitlabRepository?: pulumi.Input; + /** + * Run the stack on its own isolated Docker network. + */ + isolatedDeployment?: pulumi.Input; + /** + * Prefix volume names for isolated deployments. Retained for backwards compatibility. + */ + isolatedDeploymentsVolume?: pulumi.Input; + /** + * Display name of the stack. + */ + name?: pulumi.Input; + /** + * GitHub repository owner. + */ + owner?: pulumi.Input; + /** + * Append a random suffix to service and volume names. + */ + randomize?: pulumi.Input; + /** + * GitHub repository name. + */ + repository?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + */ + sourceType?: pulumi.Input; + /** + * Suffix appended to generated resource names. + */ + suffix?: pulumi.Input; + /** + * What triggers an automatic deployment. Valid values: `push`, `tag`. + */ + triggerType?: pulumi.Input; + /** + * Glob patterns that limit which changed paths trigger an automatic deployment. + */ + watchPaths?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/config/index.ts b/sdk/nodejs/config/index.ts new file mode 100644 index 0000000..3fbadc8 --- /dev/null +++ b/sdk/nodejs/config/index.ts @@ -0,0 +1,5 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +// Export members: +export * from "./vars"; diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts new file mode 100644 index 0000000..e2a638d --- /dev/null +++ b/sdk/nodejs/config/vars.ts @@ -0,0 +1,53 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +declare var exports: any; +const __config = new pulumi.Config("dokploy"); + +/** + * API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + */ +export declare const apiKey: string | undefined; +Object.defineProperty(exports, "apiKey", { + get() { + return __config.get("apiKey") ?? utilities.getEnv("DOKPLOY_API_KEY"); + }, + enumerable: true, +}); + +/** + * Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + */ +export declare const host: string | undefined; +Object.defineProperty(exports, "host", { + get() { + return __config.get("host") ?? utilities.getEnv("DOKPLOY_HOST"); + }, + enumerable: true, +}); + +/** + * Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + */ +export declare const insecureSkipVerify: boolean | undefined; +Object.defineProperty(exports, "insecureSkipVerify", { + get() { + return __config.getObject("insecureSkipVerify"); + }, + enumerable: true, +}); + +/** + * Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + */ +export declare const timeoutSeconds: number | undefined; +Object.defineProperty(exports, "timeoutSeconds", { + get() { + return __config.getObject("timeoutSeconds") ?? utilities.getEnvNumber("DOKPLOY_TIMEOUT_SECONDS"); + }, + enumerable: true, +}); + diff --git a/sdk/nodejs/destination.ts b/sdk/nodejs/destination.ts new file mode 100644 index 0000000..07d25ed --- /dev/null +++ b/sdk/nodejs/destination.ts @@ -0,0 +1,220 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Destination extends pulumi.CustomResource { + /** + * Get an existing Destination 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. + */ + public static get(name: string, id: pulumi.Input, state?: DestinationState, opts?: pulumi.CustomResourceOptions): Destination { + return new Destination(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/destination:Destination'; + + /** + * Returns true if the given object is an instance of Destination. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Destination { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Destination.__pulumiType; + } + + /** + * S3 access key ID. + */ + declare public readonly accessKey: pulumi.Output; + /** + * Extra flags passed to the underlying `rclone` invocation. + */ + declare public readonly additionalFlags: pulumi.Output; + /** + * Bucket name. + */ + declare public readonly bucket: pulumi.Output; + /** + * Timestamp of when the destination was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * S3 endpoint URL. + */ + declare public readonly endpoint: pulumi.Output; + /** + * Display name of the destination. + */ + declare public readonly name: pulumi.Output; + /** + * Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + */ + declare public readonly providerName: pulumi.Output; + /** + * Bucket region, for example `us-east-1`. + */ + declare public readonly region: pulumi.Output; + /** + * S3 secret access key. + */ + declare public readonly secretAccessKey: pulumi.Output; + /** + * Server this destination is scoped to. + */ + declare public readonly serverId: pulumi.Output; + + /** + * Create a Destination 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. + */ + constructor(name: string, args: DestinationArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: DestinationArgs | DestinationState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as DestinationState | undefined; + resourceInputs["accessKey"] = state?.accessKey; + resourceInputs["additionalFlags"] = state?.additionalFlags; + resourceInputs["bucket"] = state?.bucket; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["endpoint"] = state?.endpoint; + resourceInputs["name"] = state?.name; + resourceInputs["providerName"] = state?.providerName; + resourceInputs["region"] = state?.region; + resourceInputs["secretAccessKey"] = state?.secretAccessKey; + resourceInputs["serverId"] = state?.serverId; + } else { + const args = argsOrState as DestinationArgs | undefined; + if (args?.accessKey === undefined && !opts.urn) { + throw new Error("Missing required property 'accessKey'"); + } + if (args?.bucket === undefined && !opts.urn) { + throw new Error("Missing required property 'bucket'"); + } + if (args?.endpoint === undefined && !opts.urn) { + throw new Error("Missing required property 'endpoint'"); + } + if (args?.region === undefined && !opts.urn) { + throw new Error("Missing required property 'region'"); + } + if (args?.secretAccessKey === undefined && !opts.urn) { + throw new Error("Missing required property 'secretAccessKey'"); + } + resourceInputs["accessKey"] = args?.accessKey; + resourceInputs["additionalFlags"] = args?.additionalFlags; + resourceInputs["bucket"] = args?.bucket; + resourceInputs["endpoint"] = args?.endpoint; + resourceInputs["name"] = args?.name; + resourceInputs["providerName"] = args?.providerName; + resourceInputs["region"] = args?.region; + resourceInputs["secretAccessKey"] = args?.secretAccessKey ? pulumi.secret(args.secretAccessKey) : undefined; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["secretAccessKey"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Destination.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Destination resources. + */ +export interface DestinationState { + /** + * S3 access key ID. + */ + accessKey?: pulumi.Input; + /** + * Extra flags passed to the underlying `rclone` invocation. + */ + additionalFlags?: pulumi.Input[]>; + /** + * Bucket name. + */ + bucket?: pulumi.Input; + /** + * Timestamp of when the destination was created. + */ + createdAt?: pulumi.Input; + /** + * S3 endpoint URL. + */ + endpoint?: pulumi.Input; + /** + * Display name of the destination. + */ + name?: pulumi.Input; + /** + * Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + */ + providerName?: pulumi.Input; + /** + * Bucket region, for example `us-east-1`. + */ + region?: pulumi.Input; + /** + * S3 secret access key. + */ + secretAccessKey?: pulumi.Input; + /** + * Server this destination is scoped to. + */ + serverId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Destination resource. + */ +export interface DestinationArgs { + /** + * S3 access key ID. + */ + accessKey: pulumi.Input; + /** + * Extra flags passed to the underlying `rclone` invocation. + */ + additionalFlags?: pulumi.Input[]>; + /** + * Bucket name. + */ + bucket: pulumi.Input; + /** + * S3 endpoint URL. + */ + endpoint: pulumi.Input; + /** + * Display name of the destination. + */ + name?: pulumi.Input; + /** + * Provider label, for example `s3` or `cloudflare`. Named `providerName` because `provider` is reserved by Terraform. + */ + providerName?: pulumi.Input; + /** + * Bucket region, for example `us-east-1`. + */ + region: pulumi.Input; + /** + * S3 secret access key. + */ + secretAccessKey: pulumi.Input; + /** + * Server this destination is scoped to. + */ + serverId?: pulumi.Input; +} diff --git a/sdk/nodejs/domain.ts b/sdk/nodejs/domain.ts new file mode 100644 index 0000000..820f4d2 --- /dev/null +++ b/sdk/nodejs/domain.ts @@ -0,0 +1,304 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Domain extends pulumi.CustomResource { + /** + * Get an existing Domain 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. + */ + public static get(name: string, id: pulumi.Input, state?: DomainState, opts?: pulumi.CustomResourceOptions): Domain { + return new Domain(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/domain:Domain'; + + /** + * Returns true if the given object is an instance of Domain. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Domain { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Domain.__pulumiType; + } + + /** + * Application this domain routes to. + */ + declare public readonly applicationId: pulumi.Output; + /** + * How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + */ + declare public readonly certificateType: pulumi.Output; + /** + * Compose stack this domain routes to. + */ + declare public readonly composeId: pulumi.Output; + /** + * RFC 3339 timestamp of when the domain was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Traefik certificate resolver name, when `certificateType` is `custom`. + */ + declare public readonly customCertResolver: pulumi.Output; + /** + * Traefik entrypoint to bind, when not using the defaults. + */ + declare public readonly customEntrypoint: pulumi.Output; + /** + * What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + */ + declare public readonly domainType: pulumi.Output; + /** + * Protect this domain with Dokploy's forward auth. + */ + declare public readonly forwardAuthEnabled: pulumi.Output; + /** + * Fully-qualified hostname, for example `api.example.com`. + */ + declare public readonly host: pulumi.Output; + /** + * Serve the domain over HTTPS and redirect HTTP traffic to it. + */ + declare public readonly https: pulumi.Output; + /** + * Path the request is rewritten to before it reaches the container, defaults to `/`. + */ + declare public readonly internalPath: pulumi.Output; + /** + * Names of Traefik middlewares to apply. + */ + declare public readonly middlewares: pulumi.Output; + /** + * Path prefix this domain routes, defaults to `/`. + */ + declare public readonly path: pulumi.Output; + /** + * Container port that receives the traffic, defaults to `3000`. + */ + declare public readonly port: pulumi.Output; + /** + * Preview deployment this domain routes to. + */ + declare public readonly previewDeploymentId: pulumi.Output; + /** + * Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + */ + declare public readonly serviceName: pulumi.Output; + /** + * Strip `path` from the request before forwarding it. + */ + declare public readonly stripPath: pulumi.Output; + + /** + * Create a Domain 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. + */ + constructor(name: string, args: DomainArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: DomainArgs | DomainState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as DomainState | undefined; + resourceInputs["applicationId"] = state?.applicationId; + resourceInputs["certificateType"] = state?.certificateType; + resourceInputs["composeId"] = state?.composeId; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["customCertResolver"] = state?.customCertResolver; + resourceInputs["customEntrypoint"] = state?.customEntrypoint; + resourceInputs["domainType"] = state?.domainType; + resourceInputs["forwardAuthEnabled"] = state?.forwardAuthEnabled; + resourceInputs["host"] = state?.host; + resourceInputs["https"] = state?.https; + resourceInputs["internalPath"] = state?.internalPath; + resourceInputs["middlewares"] = state?.middlewares; + resourceInputs["path"] = state?.path; + resourceInputs["port"] = state?.port; + resourceInputs["previewDeploymentId"] = state?.previewDeploymentId; + resourceInputs["serviceName"] = state?.serviceName; + resourceInputs["stripPath"] = state?.stripPath; + } else { + const args = argsOrState as DomainArgs | undefined; + if (args?.host === undefined && !opts.urn) { + throw new Error("Missing required property 'host'"); + } + resourceInputs["applicationId"] = args?.applicationId; + resourceInputs["certificateType"] = args?.certificateType; + resourceInputs["composeId"] = args?.composeId; + resourceInputs["customCertResolver"] = args?.customCertResolver; + resourceInputs["customEntrypoint"] = args?.customEntrypoint; + resourceInputs["domainType"] = args?.domainType; + resourceInputs["forwardAuthEnabled"] = args?.forwardAuthEnabled; + resourceInputs["host"] = args?.host; + resourceInputs["https"] = args?.https; + resourceInputs["internalPath"] = args?.internalPath; + resourceInputs["middlewares"] = args?.middlewares; + resourceInputs["path"] = args?.path; + resourceInputs["port"] = args?.port; + resourceInputs["previewDeploymentId"] = args?.previewDeploymentId; + resourceInputs["serviceName"] = args?.serviceName; + resourceInputs["stripPath"] = args?.stripPath; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Domain.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Domain resources. + */ +export interface DomainState { + /** + * Application this domain routes to. + */ + applicationId?: pulumi.Input; + /** + * How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + */ + certificateType?: pulumi.Input; + /** + * Compose stack this domain routes to. + */ + composeId?: pulumi.Input; + /** + * RFC 3339 timestamp of when the domain was created. + */ + createdAt?: pulumi.Input; + /** + * Traefik certificate resolver name, when `certificateType` is `custom`. + */ + customCertResolver?: pulumi.Input; + /** + * Traefik entrypoint to bind, when not using the defaults. + */ + customEntrypoint?: pulumi.Input; + /** + * What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + */ + domainType?: pulumi.Input; + /** + * Protect this domain with Dokploy's forward auth. + */ + forwardAuthEnabled?: pulumi.Input; + /** + * Fully-qualified hostname, for example `api.example.com`. + */ + host?: pulumi.Input; + /** + * Serve the domain over HTTPS and redirect HTTP traffic to it. + */ + https?: pulumi.Input; + /** + * Path the request is rewritten to before it reaches the container, defaults to `/`. + */ + internalPath?: pulumi.Input; + /** + * Names of Traefik middlewares to apply. + */ + middlewares?: pulumi.Input[]>; + /** + * Path prefix this domain routes, defaults to `/`. + */ + path?: pulumi.Input; + /** + * Container port that receives the traffic, defaults to `3000`. + */ + port?: pulumi.Input; + /** + * Preview deployment this domain routes to. + */ + previewDeploymentId?: pulumi.Input; + /** + * Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + */ + serviceName?: pulumi.Input; + /** + * Strip `path` from the request before forwarding it. + */ + stripPath?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Domain resource. + */ +export interface DomainArgs { + /** + * Application this domain routes to. + */ + applicationId?: pulumi.Input; + /** + * How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + */ + certificateType?: pulumi.Input; + /** + * Compose stack this domain routes to. + */ + composeId?: pulumi.Input; + /** + * Traefik certificate resolver name, when `certificateType` is `custom`. + */ + customCertResolver?: pulumi.Input; + /** + * Traefik entrypoint to bind, when not using the defaults. + */ + customEntrypoint?: pulumi.Input; + /** + * What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + */ + domainType?: pulumi.Input; + /** + * Protect this domain with Dokploy's forward auth. + */ + forwardAuthEnabled?: pulumi.Input; + /** + * Fully-qualified hostname, for example `api.example.com`. + */ + host: pulumi.Input; + /** + * Serve the domain over HTTPS and redirect HTTP traffic to it. + */ + https?: pulumi.Input; + /** + * Path the request is rewritten to before it reaches the container, defaults to `/`. + */ + internalPath?: pulumi.Input; + /** + * Names of Traefik middlewares to apply. + */ + middlewares?: pulumi.Input[]>; + /** + * Path prefix this domain routes, defaults to `/`. + */ + path?: pulumi.Input; + /** + * Container port that receives the traffic, defaults to `3000`. + */ + port?: pulumi.Input; + /** + * Preview deployment this domain routes to. + */ + previewDeploymentId?: pulumi.Input; + /** + * Name of the service inside a Compose stack that receives the traffic. Required when `composeId` is set. + */ + serviceName?: pulumi.Input; + /** + * Strip `path` from the request before forwarding it. + */ + stripPath?: pulumi.Input; +} diff --git a/sdk/nodejs/environment.ts b/sdk/nodejs/environment.ts new file mode 100644 index 0000000..f2708fb --- /dev/null +++ b/sdk/nodejs/environment.ts @@ -0,0 +1,146 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Environment extends pulumi.CustomResource { + /** + * Get an existing Environment 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. + */ + public static get(name: string, id: pulumi.Input, state?: EnvironmentState, opts?: pulumi.CustomResourceOptions): Environment { + return new Environment(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/environment:Environment'; + + /** + * Returns true if the given object is an instance of Environment. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Environment { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Environment.__pulumiType; + } + + /** + * RFC 3339 timestamp of when the environment was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + */ + declare public readonly env: pulumi.Output; + /** + * Whether this is the project's default environment. + */ + declare public /*out*/ readonly isDefault: pulumi.Output; + /** + * Environment name, for example `staging`. + */ + declare public readonly name: pulumi.Output; + /** + * Project this environment belongs to. + */ + declare public readonly projectId: pulumi.Output; + + /** + * Create a Environment 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. + */ + constructor(name: string, args: EnvironmentArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: EnvironmentArgs | EnvironmentState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as EnvironmentState | undefined; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["description"] = state?.description; + resourceInputs["env"] = state?.env; + resourceInputs["isDefault"] = state?.isDefault; + resourceInputs["name"] = state?.name; + resourceInputs["projectId"] = state?.projectId; + } else { + const args = argsOrState as EnvironmentArgs | undefined; + if (args?.projectId === undefined && !opts.urn) { + throw new Error("Missing required property 'projectId'"); + } + resourceInputs["description"] = args?.description; + resourceInputs["env"] = args?.env; + resourceInputs["name"] = args?.name; + resourceInputs["projectId"] = args?.projectId; + resourceInputs["createdAt"] = undefined /*out*/; + resourceInputs["isDefault"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Environment.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Environment resources. + */ +export interface EnvironmentState { + /** + * RFC 3339 timestamp of when the environment was created. + */ + createdAt?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + */ + env?: pulumi.Input; + /** + * Whether this is the project's default environment. + */ + isDefault?: pulumi.Input; + /** + * Environment name, for example `staging`. + */ + name?: pulumi.Input; + /** + * Project this environment belongs to. + */ + projectId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Environment resource. + */ +export interface EnvironmentArgs { + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + */ + env?: pulumi.Input; + /** + * Environment name, for example `staging`. + */ + name?: pulumi.Input; + /** + * Project this environment belongs to. + */ + projectId: pulumi.Input; +} diff --git a/sdk/nodejs/getApplication.ts b/sdk/nodejs/getApplication.ts new file mode 100644 index 0000000..aae24ea --- /dev/null +++ b/sdk/nodejs/getApplication.ts @@ -0,0 +1,47 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export function getApplication(args: GetApplicationArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("dokploy:index/getApplication:getApplication", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getApplication. + */ +export interface GetApplicationArgs { + id: string; +} + +/** + * A collection of values returned by getApplication. + */ +export interface GetApplicationResult { + readonly appName: string; + readonly applicationStatus: string; + readonly buildType: string; + readonly createdAt: string; + readonly description: string; + readonly environmentId: string; + readonly id: string; + readonly name: string; + readonly sourceType: string; +} +export function getApplicationOutput(args: GetApplicationOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("dokploy:index/getApplication:getApplication", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getApplication. + */ +export interface GetApplicationOutputArgs { + id: pulumi.Input; +} diff --git a/sdk/nodejs/getEnvironment.ts b/sdk/nodejs/getEnvironment.ts new file mode 100644 index 0000000..b3e10c7 --- /dev/null +++ b/sdk/nodejs/getEnvironment.ts @@ -0,0 +1,45 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export function getEnvironment(args: GetEnvironmentArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("dokploy:index/getEnvironment:getEnvironment", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getEnvironment. + */ +export interface GetEnvironmentArgs { + id: string; +} + +/** + * A collection of values returned by getEnvironment. + */ +export interface GetEnvironmentResult { + readonly createdAt: string; + readonly description: string; + readonly env: string; + readonly id: string; + readonly isDefault: boolean; + readonly name: string; + readonly projectId: string; +} +export function getEnvironmentOutput(args: GetEnvironmentOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("dokploy:index/getEnvironment:getEnvironment", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getEnvironment. + */ +export interface GetEnvironmentOutputArgs { + id: pulumi.Input; +} diff --git a/sdk/nodejs/getProject.ts b/sdk/nodejs/getProject.ts new file mode 100644 index 0000000..5a00336 --- /dev/null +++ b/sdk/nodejs/getProject.ts @@ -0,0 +1,48 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +export function getProject(args: GetProjectArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("dokploy:index/getProject:getProject", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getProject. + */ +export interface GetProjectArgs { + id: string; +} + +/** + * A collection of values returned by getProject. + */ +export interface GetProjectResult { + readonly createdAt: string; + readonly defaultEnvironmentId: string; + readonly description: string; + readonly env: string; + readonly environments: outputs.GetProjectEnvironment[]; + readonly id: string; + readonly name: string; + readonly organizationId: string; +} +export function getProjectOutput(args: GetProjectOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("dokploy:index/getProject:getProject", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getProject. + */ +export interface GetProjectOutputArgs { + id: pulumi.Input; +} diff --git a/sdk/nodejs/getProjects.ts b/sdk/nodejs/getProjects.ts new file mode 100644 index 0000000..08dc4a9 --- /dev/null +++ b/sdk/nodejs/getProjects.ts @@ -0,0 +1,25 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +export function getProjects(opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("dokploy:index/getProjects:getProjects", { + }, opts); +} + +/** + * A collection of values returned by getProjects. + */ +export interface GetProjectsResult { + readonly projects: outputs.GetProjectsProject[]; +} +export function getProjectsOutput(opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("dokploy:index/getProjects:getProjects", { + }, opts); +} diff --git a/sdk/nodejs/getServers.ts b/sdk/nodejs/getServers.ts new file mode 100644 index 0000000..2070f87 --- /dev/null +++ b/sdk/nodejs/getServers.ts @@ -0,0 +1,25 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +export function getServers(opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("dokploy:index/getServers:getServers", { + }, opts); +} + +/** + * A collection of values returned by getServers. + */ +export interface GetServersResult { + readonly servers: outputs.GetServersServer[]; +} +export function getServersOutput(opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("dokploy:index/getServers:getServers", { + }, opts); +} diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts new file mode 100644 index 0000000..7e8f43c --- /dev/null +++ b/sdk/nodejs/index.ts @@ -0,0 +1,207 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +// Export members: +export { ApplicationArgs, ApplicationState } from "./application"; +export type Application = import("./application").Application; +export const Application: typeof import("./application").Application = null as any; +utilities.lazyLoad(exports, ["Application"], () => require("./application")); + +export { CertificateArgs, CertificateState } from "./certificate"; +export type Certificate = import("./certificate").Certificate; +export const Certificate: typeof import("./certificate").Certificate = null as any; +utilities.lazyLoad(exports, ["Certificate"], () => require("./certificate")); + +export { ComposeArgs, ComposeState } from "./compose"; +export type Compose = import("./compose").Compose; +export const Compose: typeof import("./compose").Compose = null as any; +utilities.lazyLoad(exports, ["Compose"], () => require("./compose")); + +export { DestinationArgs, DestinationState } from "./destination"; +export type Destination = import("./destination").Destination; +export const Destination: typeof import("./destination").Destination = null as any; +utilities.lazyLoad(exports, ["Destination"], () => require("./destination")); + +export { DomainArgs, DomainState } from "./domain"; +export type Domain = import("./domain").Domain; +export const Domain: typeof import("./domain").Domain = null as any; +utilities.lazyLoad(exports, ["Domain"], () => require("./domain")); + +export { EnvironmentArgs, EnvironmentState } from "./environment"; +export type Environment = import("./environment").Environment; +export const Environment: typeof import("./environment").Environment = null as any; +utilities.lazyLoad(exports, ["Environment"], () => require("./environment")); + +export { GetApplicationArgs, GetApplicationResult, GetApplicationOutputArgs } from "./getApplication"; +export const getApplication: typeof import("./getApplication").getApplication = null as any; +export const getApplicationOutput: typeof import("./getApplication").getApplicationOutput = null as any; +utilities.lazyLoad(exports, ["getApplication","getApplicationOutput"], () => require("./getApplication")); + +export { GetEnvironmentArgs, GetEnvironmentResult, GetEnvironmentOutputArgs } from "./getEnvironment"; +export const getEnvironment: typeof import("./getEnvironment").getEnvironment = null as any; +export const getEnvironmentOutput: typeof import("./getEnvironment").getEnvironmentOutput = null as any; +utilities.lazyLoad(exports, ["getEnvironment","getEnvironmentOutput"], () => require("./getEnvironment")); + +export { GetProjectArgs, GetProjectResult, GetProjectOutputArgs } from "./getProject"; +export const getProject: typeof import("./getProject").getProject = null as any; +export const getProjectOutput: typeof import("./getProject").getProjectOutput = null as any; +utilities.lazyLoad(exports, ["getProject","getProjectOutput"], () => require("./getProject")); + +export { GetProjectsResult } from "./getProjects"; +export const getProjects: typeof import("./getProjects").getProjects = null as any; +export const getProjectsOutput: typeof import("./getProjects").getProjectsOutput = null as any; +utilities.lazyLoad(exports, ["getProjects","getProjectsOutput"], () => require("./getProjects")); + +export { GetServersResult } from "./getServers"; +export const getServers: typeof import("./getServers").getServers = null as any; +export const getServersOutput: typeof import("./getServers").getServersOutput = null as any; +utilities.lazyLoad(exports, ["getServers","getServersOutput"], () => require("./getServers")); + +export { MariaDbArgs, MariaDbState } from "./mariaDb"; +export type MariaDb = import("./mariaDb").MariaDb; +export const MariaDb: typeof import("./mariaDb").MariaDb = null as any; +utilities.lazyLoad(exports, ["MariaDb"], () => require("./mariaDb")); + +export { MongoArgs, MongoState } from "./mongo"; +export type Mongo = import("./mongo").Mongo; +export const Mongo: typeof import("./mongo").Mongo = null as any; +utilities.lazyLoad(exports, ["Mongo"], () => require("./mongo")); + +export { MountArgs, MountState } from "./mount"; +export type Mount = import("./mount").Mount; +export const Mount: typeof import("./mount").Mount = null as any; +utilities.lazyLoad(exports, ["Mount"], () => require("./mount")); + +export { MySqlArgs, MySqlState } from "./mySql"; +export type MySql = import("./mySql").MySql; +export const MySql: typeof import("./mySql").MySql = null as any; +utilities.lazyLoad(exports, ["MySql"], () => require("./mySql")); + +export { PortArgs, PortState } from "./port"; +export type Port = import("./port").Port; +export const Port: typeof import("./port").Port = null as any; +utilities.lazyLoad(exports, ["Port"], () => require("./port")); + +export { PostgresArgs, PostgresState } from "./postgres"; +export type Postgres = import("./postgres").Postgres; +export const Postgres: typeof import("./postgres").Postgres = null as any; +utilities.lazyLoad(exports, ["Postgres"], () => require("./postgres")); + +export { ProjectArgs, ProjectState } from "./project"; +export type Project = import("./project").Project; +export const Project: typeof import("./project").Project = null as any; +utilities.lazyLoad(exports, ["Project"], () => require("./project")); + +export * from "./provider"; +import { Provider } from "./provider"; + +export { RedirectArgs, RedirectState } from "./redirect"; +export type Redirect = import("./redirect").Redirect; +export const Redirect: typeof import("./redirect").Redirect = null as any; +utilities.lazyLoad(exports, ["Redirect"], () => require("./redirect")); + +export { RedisArgs, RedisState } from "./redis"; +export type Redis = import("./redis").Redis; +export const Redis: typeof import("./redis").Redis = null as any; +utilities.lazyLoad(exports, ["Redis"], () => require("./redis")); + +export { RegistryArgs, RegistryState } from "./registry"; +export type Registry = import("./registry").Registry; +export const Registry: typeof import("./registry").Registry = null as any; +utilities.lazyLoad(exports, ["Registry"], () => require("./registry")); + +export { SecurityArgs, SecurityState } from "./security"; +export type Security = import("./security").Security; +export const Security: typeof import("./security").Security = null as any; +utilities.lazyLoad(exports, ["Security"], () => require("./security")); + +export { SshKeyArgs, SshKeyState } from "./sshKey"; +export type SshKey = import("./sshKey").SshKey; +export const SshKey: typeof import("./sshKey").SshKey = null as any; +utilities.lazyLoad(exports, ["SshKey"], () => require("./sshKey")); + + +// Export sub-modules: +import * as config from "./config"; +import * as types from "./types"; + +export { + config, + types, +}; + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "dokploy:index/application:Application": + return new Application(name, undefined, { urn }) + case "dokploy:index/certificate:Certificate": + return new Certificate(name, undefined, { urn }) + case "dokploy:index/compose:Compose": + return new Compose(name, undefined, { urn }) + case "dokploy:index/destination:Destination": + return new Destination(name, undefined, { urn }) + case "dokploy:index/domain:Domain": + return new Domain(name, undefined, { urn }) + case "dokploy:index/environment:Environment": + return new Environment(name, undefined, { urn }) + case "dokploy:index/mariaDb:MariaDb": + return new MariaDb(name, undefined, { urn }) + case "dokploy:index/mongo:Mongo": + return new Mongo(name, undefined, { urn }) + case "dokploy:index/mount:Mount": + return new Mount(name, undefined, { urn }) + case "dokploy:index/mySql:MySql": + return new MySql(name, undefined, { urn }) + case "dokploy:index/port:Port": + return new Port(name, undefined, { urn }) + case "dokploy:index/postgres:Postgres": + return new Postgres(name, undefined, { urn }) + case "dokploy:index/project:Project": + return new Project(name, undefined, { urn }) + case "dokploy:index/redirect:Redirect": + return new Redirect(name, undefined, { urn }) + case "dokploy:index/redis:Redis": + return new Redis(name, undefined, { urn }) + case "dokploy:index/registry:Registry": + return new Registry(name, undefined, { urn }) + case "dokploy:index/security:Security": + return new Security(name, undefined, { urn }) + case "dokploy:index/sshKey:SshKey": + return new SshKey(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("dokploy", "index/application", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/certificate", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/compose", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/destination", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/domain", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/environment", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/mariaDb", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/mongo", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/mount", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/mySql", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/port", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/postgres", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/project", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/redirect", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/redis", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/registry", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/security", _module) +pulumi.runtime.registerResourceModule("dokploy", "index/sshKey", _module) +pulumi.runtime.registerResourcePackage("dokploy", { + version: utilities.getVersion(), + constructProvider: (name: string, type: string, urn: string): pulumi.ProviderResource => { + if (type !== "pulumi:providers:dokploy") { + throw new Error(`unknown provider type ${type}`); + } + return new Provider(name, undefined, { urn }); + }, +}); diff --git a/sdk/nodejs/mariaDb.ts b/sdk/nodejs/mariaDb.ts new file mode 100644 index 0000000..1d37391 --- /dev/null +++ b/sdk/nodejs/mariaDb.ts @@ -0,0 +1,555 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class MariaDb extends pulumi.CustomResource { + /** + * Get an existing MariaDb 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. + */ + public static get(name: string, id: pulumi.Input, state?: MariaDbState, opts?: pulumi.CustomResourceOptions): MariaDb { + return new MariaDb(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/mariaDb:MariaDb'; + + /** + * Returns true if the given object is an instance of MariaDb. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is MariaDb { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === MariaDb.__pulumiType; + } + + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + declare public readonly appName: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly applicationStatus: pulumi.Output; + /** + * Arguments appended to the container command. + */ + declare public readonly args: pulumi.Output; + /** + * Override the container entrypoint command. + */ + declare public readonly command: pulumi.Output; + /** + * Hard CPU limit, for example `1`. + */ + declare public readonly cpuLimit: pulumi.Output; + /** + * Soft CPU reservation, for example `0.5`. + */ + declare public readonly cpuReservation: pulumi.Output; + /** + * RFC 3339 timestamp of when the database was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Name of the database to create. + */ + declare public readonly databaseName: pulumi.Output; + /** + * Password for the database user. + */ + declare public readonly databasePassword: pulumi.Output; + /** + * Password for the MariaDB `root` user. + */ + declare public readonly databaseRootPassword: pulumi.Output; + /** + * Database user to create. + */ + declare public readonly databaseUser: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Detach the service from the shared `dokploy-network`. + */ + declare public readonly detachDokployNetwork: pulumi.Output; + /** + * MariaDB image to run, for example `mariadb:11`. + */ + declare public readonly dockerImage: pulumi.Output; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + declare public readonly endpointSpecSwarm: pulumi.Output; + /** + * Environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this database belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + declare public readonly externalPort: pulumi.Output; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + declare public readonly healthCheckSwarm: pulumi.Output; + /** + * Docker Swarm service labels, as a JSON object. + */ + declare public readonly labelsSwarm: pulumi.Output; + /** + * Hard memory limit, for example `512m`. + */ + declare public readonly memoryLimit: pulumi.Output; + /** + * Soft memory reservation, for example `256m`. + */ + declare public readonly memoryReservation: pulumi.Output; + /** + * Docker Swarm service mode, as a JSON object. + */ + declare public readonly modeSwarm: pulumi.Output; + /** + * Display name of the database. + */ + declare public readonly name: pulumi.Output; + /** + * IDs of additional Docker networks to attach. + */ + declare public readonly networkIds: pulumi.Output; + /** + * Docker Swarm network attachments, as a JSON array. + */ + declare public readonly networkSwarm: pulumi.Output; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + declare public readonly placementSwarm: pulumi.Output; + /** + * Number of replicas to run. + */ + declare public readonly replicas: pulumi.Output; + /** + * Docker Swarm restart policy, as a JSON object. + */ + declare public readonly restartPolicySwarm: pulumi.Output; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + declare public readonly rollbackConfigSwarm: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Grace period in nanoseconds before a container is killed. + */ + declare public readonly stopGracePeriodSwarm: pulumi.Output; + /** + * Docker Swarm ulimits, as a JSON object. + */ + declare public readonly ulimitsSwarm: pulumi.Output; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + declare public readonly updateConfigSwarm: pulumi.Output; + + /** + * Create a MariaDb 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. + */ + constructor(name: string, args: MariaDbArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MariaDbArgs | MariaDbState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MariaDbState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["applicationStatus"] = state?.applicationStatus; + resourceInputs["args"] = state?.args; + resourceInputs["command"] = state?.command; + resourceInputs["cpuLimit"] = state?.cpuLimit; + resourceInputs["cpuReservation"] = state?.cpuReservation; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["databaseName"] = state?.databaseName; + resourceInputs["databasePassword"] = state?.databasePassword; + resourceInputs["databaseRootPassword"] = state?.databaseRootPassword; + resourceInputs["databaseUser"] = state?.databaseUser; + resourceInputs["description"] = state?.description; + resourceInputs["detachDokployNetwork"] = state?.detachDokployNetwork; + resourceInputs["dockerImage"] = state?.dockerImage; + resourceInputs["endpointSpecSwarm"] = state?.endpointSpecSwarm; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["externalPort"] = state?.externalPort; + resourceInputs["healthCheckSwarm"] = state?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = state?.labelsSwarm; + resourceInputs["memoryLimit"] = state?.memoryLimit; + resourceInputs["memoryReservation"] = state?.memoryReservation; + resourceInputs["modeSwarm"] = state?.modeSwarm; + resourceInputs["name"] = state?.name; + resourceInputs["networkIds"] = state?.networkIds; + resourceInputs["networkSwarm"] = state?.networkSwarm; + resourceInputs["placementSwarm"] = state?.placementSwarm; + resourceInputs["replicas"] = state?.replicas; + resourceInputs["restartPolicySwarm"] = state?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = state?.rollbackConfigSwarm; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["stopGracePeriodSwarm"] = state?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = state?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = state?.updateConfigSwarm; + } else { + const args = argsOrState as MariaDbArgs | undefined; + if (args?.databaseName === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseName'"); + } + if (args?.databasePassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databasePassword'"); + } + if (args?.databaseRootPassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseRootPassword'"); + } + if (args?.databaseUser === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseUser'"); + } + if (args?.dockerImage === undefined && !opts.urn) { + throw new Error("Missing required property 'dockerImage'"); + } + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["args"] = args?.args; + resourceInputs["command"] = args?.command; + resourceInputs["cpuLimit"] = args?.cpuLimit; + resourceInputs["cpuReservation"] = args?.cpuReservation; + resourceInputs["databaseName"] = args?.databaseName; + resourceInputs["databasePassword"] = args?.databasePassword ? pulumi.secret(args.databasePassword) : undefined; + resourceInputs["databaseRootPassword"] = args?.databaseRootPassword ? pulumi.secret(args.databaseRootPassword) : undefined; + resourceInputs["databaseUser"] = args?.databaseUser; + resourceInputs["description"] = args?.description; + resourceInputs["detachDokployNetwork"] = args?.detachDokployNetwork; + resourceInputs["dockerImage"] = args?.dockerImage; + resourceInputs["endpointSpecSwarm"] = args?.endpointSpecSwarm; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["externalPort"] = args?.externalPort; + resourceInputs["healthCheckSwarm"] = args?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = args?.labelsSwarm; + resourceInputs["memoryLimit"] = args?.memoryLimit; + resourceInputs["memoryReservation"] = args?.memoryReservation; + resourceInputs["modeSwarm"] = args?.modeSwarm; + resourceInputs["name"] = args?.name; + resourceInputs["networkIds"] = args?.networkIds; + resourceInputs["networkSwarm"] = args?.networkSwarm; + resourceInputs["placementSwarm"] = args?.placementSwarm; + resourceInputs["replicas"] = args?.replicas; + resourceInputs["restartPolicySwarm"] = args?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = args?.rollbackConfigSwarm; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["stopGracePeriodSwarm"] = args?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = args?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = args?.updateConfigSwarm; + resourceInputs["applicationStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["databasePassword", "databaseRootPassword"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(MariaDb.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering MariaDb resources. + */ +export interface MariaDbState { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + applicationStatus?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * RFC 3339 timestamp of when the database was created. + */ + createdAt?: pulumi.Input; + /** + * Name of the database to create. + */ + databaseName?: pulumi.Input; + /** + * Password for the database user. + */ + databasePassword?: pulumi.Input; + /** + * Password for the MariaDB `root` user. + */ + databaseRootPassword?: pulumi.Input; + /** + * Database user to create. + */ + databaseUser?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * MariaDB image to run, for example `mariadb:11`. + */ + dockerImage?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId?: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} + +/** + * The set of arguments for constructing a MariaDb resource. + */ +export interface MariaDbArgs { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Name of the database to create. + */ + databaseName: pulumi.Input; + /** + * Password for the database user. + */ + databasePassword: pulumi.Input; + /** + * Password for the MariaDB `root` user. + */ + databaseRootPassword: pulumi.Input; + /** + * Database user to create. + */ + databaseUser: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * MariaDB image to run, for example `mariadb:11`. + */ + dockerImage: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} diff --git a/sdk/nodejs/mongo.ts b/sdk/nodejs/mongo.ts new file mode 100644 index 0000000..f448a04 --- /dev/null +++ b/sdk/nodejs/mongo.ts @@ -0,0 +1,532 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Mongo extends pulumi.CustomResource { + /** + * Get an existing Mongo 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. + */ + public static get(name: string, id: pulumi.Input, state?: MongoState, opts?: pulumi.CustomResourceOptions): Mongo { + return new Mongo(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/mongo:Mongo'; + + /** + * Returns true if the given object is an instance of Mongo. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Mongo { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Mongo.__pulumiType; + } + + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + declare public readonly appName: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly applicationStatus: pulumi.Output; + /** + * Arguments appended to the container command. + */ + declare public readonly args: pulumi.Output; + /** + * Override the container entrypoint command. + */ + declare public readonly command: pulumi.Output; + /** + * Hard CPU limit, for example `1`. + */ + declare public readonly cpuLimit: pulumi.Output; + /** + * Soft CPU reservation, for example `0.5`. + */ + declare public readonly cpuReservation: pulumi.Output; + /** + * RFC 3339 timestamp of when the database was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Password for the root user. + */ + declare public readonly databasePassword: pulumi.Output; + /** + * Root username to create. + */ + declare public readonly databaseUser: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Detach the service from the shared `dokploy-network`. + */ + declare public readonly detachDokployNetwork: pulumi.Output; + /** + * MongoDB image to run. Defaults to `mongo:8`. + */ + declare public readonly dockerImage: pulumi.Output; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + declare public readonly endpointSpecSwarm: pulumi.Output; + /** + * Environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this database belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + declare public readonly externalPort: pulumi.Output; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + declare public readonly healthCheckSwarm: pulumi.Output; + /** + * Docker Swarm service labels, as a JSON object. + */ + declare public readonly labelsSwarm: pulumi.Output; + /** + * Hard memory limit, for example `512m`. + */ + declare public readonly memoryLimit: pulumi.Output; + /** + * Soft memory reservation, for example `256m`. + */ + declare public readonly memoryReservation: pulumi.Output; + /** + * Docker Swarm service mode, as a JSON object. + */ + declare public readonly modeSwarm: pulumi.Output; + /** + * Display name of the database. + */ + declare public readonly name: pulumi.Output; + /** + * IDs of additional Docker networks to attach. + */ + declare public readonly networkIds: pulumi.Output; + /** + * Docker Swarm network attachments, as a JSON array. + */ + declare public readonly networkSwarm: pulumi.Output; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + declare public readonly placementSwarm: pulumi.Output; + /** + * Start the instance as a single-node replica set. + */ + declare public readonly replicaSets: pulumi.Output; + /** + * Number of replicas to run. + */ + declare public readonly replicas: pulumi.Output; + /** + * Docker Swarm restart policy, as a JSON object. + */ + declare public readonly restartPolicySwarm: pulumi.Output; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + declare public readonly rollbackConfigSwarm: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Grace period in nanoseconds before a container is killed. + */ + declare public readonly stopGracePeriodSwarm: pulumi.Output; + /** + * Docker Swarm ulimits, as a JSON object. + */ + declare public readonly ulimitsSwarm: pulumi.Output; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + declare public readonly updateConfigSwarm: pulumi.Output; + + /** + * Create a Mongo 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. + */ + constructor(name: string, args: MongoArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MongoArgs | MongoState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MongoState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["applicationStatus"] = state?.applicationStatus; + resourceInputs["args"] = state?.args; + resourceInputs["command"] = state?.command; + resourceInputs["cpuLimit"] = state?.cpuLimit; + resourceInputs["cpuReservation"] = state?.cpuReservation; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["databasePassword"] = state?.databasePassword; + resourceInputs["databaseUser"] = state?.databaseUser; + resourceInputs["description"] = state?.description; + resourceInputs["detachDokployNetwork"] = state?.detachDokployNetwork; + resourceInputs["dockerImage"] = state?.dockerImage; + resourceInputs["endpointSpecSwarm"] = state?.endpointSpecSwarm; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["externalPort"] = state?.externalPort; + resourceInputs["healthCheckSwarm"] = state?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = state?.labelsSwarm; + resourceInputs["memoryLimit"] = state?.memoryLimit; + resourceInputs["memoryReservation"] = state?.memoryReservation; + resourceInputs["modeSwarm"] = state?.modeSwarm; + resourceInputs["name"] = state?.name; + resourceInputs["networkIds"] = state?.networkIds; + resourceInputs["networkSwarm"] = state?.networkSwarm; + resourceInputs["placementSwarm"] = state?.placementSwarm; + resourceInputs["replicaSets"] = state?.replicaSets; + resourceInputs["replicas"] = state?.replicas; + resourceInputs["restartPolicySwarm"] = state?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = state?.rollbackConfigSwarm; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["stopGracePeriodSwarm"] = state?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = state?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = state?.updateConfigSwarm; + } else { + const args = argsOrState as MongoArgs | undefined; + if (args?.databasePassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databasePassword'"); + } + if (args?.databaseUser === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseUser'"); + } + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["args"] = args?.args; + resourceInputs["command"] = args?.command; + resourceInputs["cpuLimit"] = args?.cpuLimit; + resourceInputs["cpuReservation"] = args?.cpuReservation; + resourceInputs["databasePassword"] = args?.databasePassword ? pulumi.secret(args.databasePassword) : undefined; + resourceInputs["databaseUser"] = args?.databaseUser; + resourceInputs["description"] = args?.description; + resourceInputs["detachDokployNetwork"] = args?.detachDokployNetwork; + resourceInputs["dockerImage"] = args?.dockerImage; + resourceInputs["endpointSpecSwarm"] = args?.endpointSpecSwarm; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["externalPort"] = args?.externalPort; + resourceInputs["healthCheckSwarm"] = args?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = args?.labelsSwarm; + resourceInputs["memoryLimit"] = args?.memoryLimit; + resourceInputs["memoryReservation"] = args?.memoryReservation; + resourceInputs["modeSwarm"] = args?.modeSwarm; + resourceInputs["name"] = args?.name; + resourceInputs["networkIds"] = args?.networkIds; + resourceInputs["networkSwarm"] = args?.networkSwarm; + resourceInputs["placementSwarm"] = args?.placementSwarm; + resourceInputs["replicaSets"] = args?.replicaSets; + resourceInputs["replicas"] = args?.replicas; + resourceInputs["restartPolicySwarm"] = args?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = args?.rollbackConfigSwarm; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["stopGracePeriodSwarm"] = args?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = args?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = args?.updateConfigSwarm; + resourceInputs["applicationStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["databasePassword"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Mongo.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Mongo resources. + */ +export interface MongoState { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + applicationStatus?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * RFC 3339 timestamp of when the database was created. + */ + createdAt?: pulumi.Input; + /** + * Password for the root user. + */ + databasePassword?: pulumi.Input; + /** + * Root username to create. + */ + databaseUser?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * MongoDB image to run. Defaults to `mongo:8`. + */ + dockerImage?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId?: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Start the instance as a single-node replica set. + */ + replicaSets?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Mongo resource. + */ +export interface MongoArgs { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Password for the root user. + */ + databasePassword: pulumi.Input; + /** + * Root username to create. + */ + databaseUser: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * MongoDB image to run. Defaults to `mongo:8`. + */ + dockerImage?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Start the instance as a single-node replica set. + */ + replicaSets?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} diff --git a/sdk/nodejs/mount.ts b/sdk/nodejs/mount.ts new file mode 100644 index 0000000..0290257 --- /dev/null +++ b/sdk/nodejs/mount.ts @@ -0,0 +1,191 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Mount extends pulumi.CustomResource { + /** + * Get an existing Mount 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. + */ + public static get(name: string, id: pulumi.Input, state?: MountState, opts?: pulumi.CustomResourceOptions): Mount { + return new Mount(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/mount:Mount'; + + /** + * Returns true if the given object is an instance of Mount. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Mount { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Mount.__pulumiType; + } + + /** + * Contents of the generated file, when `type` is `file`. + */ + declare public readonly content: pulumi.Output; + /** + * Path of the generated file, when `type` is `file`. + */ + declare public readonly filePath: pulumi.Output; + /** + * Path on the host, when `type` is `bind`. + */ + declare public readonly hostPath: pulumi.Output; + /** + * Path inside the container where the mount appears. + */ + declare public readonly mountPath: pulumi.Output; + /** + * ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + */ + declare public readonly serviceId: pulumi.Output; + /** + * The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + */ + declare public readonly serviceType: pulumi.Output; + /** + * The kind of mount to create. Valid values: `bind`, `volume`, `file`. + */ + declare public readonly type: pulumi.Output; + /** + * Name of the Docker volume, when `type` is `volume`. + */ + declare public readonly volumeName: pulumi.Output; + + /** + * Create a Mount 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. + */ + constructor(name: string, args: MountArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MountArgs | MountState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MountState | undefined; + resourceInputs["content"] = state?.content; + resourceInputs["filePath"] = state?.filePath; + resourceInputs["hostPath"] = state?.hostPath; + resourceInputs["mountPath"] = state?.mountPath; + resourceInputs["serviceId"] = state?.serviceId; + resourceInputs["serviceType"] = state?.serviceType; + resourceInputs["type"] = state?.type; + resourceInputs["volumeName"] = state?.volumeName; + } else { + const args = argsOrState as MountArgs | undefined; + if (args?.mountPath === undefined && !opts.urn) { + throw new Error("Missing required property 'mountPath'"); + } + if (args?.serviceId === undefined && !opts.urn) { + throw new Error("Missing required property 'serviceId'"); + } + if (args?.serviceType === undefined && !opts.urn) { + throw new Error("Missing required property 'serviceType'"); + } + if (args?.type === undefined && !opts.urn) { + throw new Error("Missing required property 'type'"); + } + resourceInputs["content"] = args?.content; + resourceInputs["filePath"] = args?.filePath; + resourceInputs["hostPath"] = args?.hostPath; + resourceInputs["mountPath"] = args?.mountPath; + resourceInputs["serviceId"] = args?.serviceId; + resourceInputs["serviceType"] = args?.serviceType; + resourceInputs["type"] = args?.type; + resourceInputs["volumeName"] = args?.volumeName; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Mount.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Mount resources. + */ +export interface MountState { + /** + * Contents of the generated file, when `type` is `file`. + */ + content?: pulumi.Input; + /** + * Path of the generated file, when `type` is `file`. + */ + filePath?: pulumi.Input; + /** + * Path on the host, when `type` is `bind`. + */ + hostPath?: pulumi.Input; + /** + * Path inside the container where the mount appears. + */ + mountPath?: pulumi.Input; + /** + * ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + */ + serviceId?: pulumi.Input; + /** + * The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + */ + serviceType?: pulumi.Input; + /** + * The kind of mount to create. Valid values: `bind`, `volume`, `file`. + */ + type?: pulumi.Input; + /** + * Name of the Docker volume, when `type` is `volume`. + */ + volumeName?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Mount resource. + */ +export interface MountArgs { + /** + * Contents of the generated file, when `type` is `file`. + */ + content?: pulumi.Input; + /** + * Path of the generated file, when `type` is `file`. + */ + filePath?: pulumi.Input; + /** + * Path on the host, when `type` is `bind`. + */ + hostPath?: pulumi.Input; + /** + * Path inside the container where the mount appears. + */ + mountPath: pulumi.Input; + /** + * ID of the service this mount attaches to. Must match `serviceType` — an application ID, a compose ID, a postgres ID, and so on. + */ + serviceId: pulumi.Input; + /** + * The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + */ + serviceType: pulumi.Input; + /** + * The kind of mount to create. Valid values: `bind`, `volume`, `file`. + */ + type: pulumi.Input; + /** + * Name of the Docker volume, when `type` is `volume`. + */ + volumeName?: pulumi.Input; +} diff --git a/sdk/nodejs/mySql.ts b/sdk/nodejs/mySql.ts new file mode 100644 index 0000000..6cf1442 --- /dev/null +++ b/sdk/nodejs/mySql.ts @@ -0,0 +1,555 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class MySql extends pulumi.CustomResource { + /** + * Get an existing MySql 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. + */ + public static get(name: string, id: pulumi.Input, state?: MySqlState, opts?: pulumi.CustomResourceOptions): MySql { + return new MySql(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/mySql:MySql'; + + /** + * Returns true if the given object is an instance of MySql. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is MySql { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === MySql.__pulumiType; + } + + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + declare public readonly appName: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly applicationStatus: pulumi.Output; + /** + * Arguments appended to the container command. + */ + declare public readonly args: pulumi.Output; + /** + * Override the container entrypoint command. + */ + declare public readonly command: pulumi.Output; + /** + * Hard CPU limit, for example `1`. + */ + declare public readonly cpuLimit: pulumi.Output; + /** + * Soft CPU reservation, for example `0.5`. + */ + declare public readonly cpuReservation: pulumi.Output; + /** + * RFC 3339 timestamp of when the database was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Name of the database to create. + */ + declare public readonly databaseName: pulumi.Output; + /** + * Password for the database user. + */ + declare public readonly databasePassword: pulumi.Output; + /** + * Password for the MySQL `root` user. + */ + declare public readonly databaseRootPassword: pulumi.Output; + /** + * Database user to create. + */ + declare public readonly databaseUser: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Detach the service from the shared `dokploy-network`. + */ + declare public readonly detachDokployNetwork: pulumi.Output; + /** + * MySQL image to run, for example `mysql:8`. + */ + declare public readonly dockerImage: pulumi.Output; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + declare public readonly endpointSpecSwarm: pulumi.Output; + /** + * Environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this database belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + declare public readonly externalPort: pulumi.Output; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + declare public readonly healthCheckSwarm: pulumi.Output; + /** + * Docker Swarm service labels, as a JSON object. + */ + declare public readonly labelsSwarm: pulumi.Output; + /** + * Hard memory limit, for example `512m`. + */ + declare public readonly memoryLimit: pulumi.Output; + /** + * Soft memory reservation, for example `256m`. + */ + declare public readonly memoryReservation: pulumi.Output; + /** + * Docker Swarm service mode, as a JSON object. + */ + declare public readonly modeSwarm: pulumi.Output; + /** + * Display name of the database. + */ + declare public readonly name: pulumi.Output; + /** + * IDs of additional Docker networks to attach. + */ + declare public readonly networkIds: pulumi.Output; + /** + * Docker Swarm network attachments, as a JSON array. + */ + declare public readonly networkSwarm: pulumi.Output; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + declare public readonly placementSwarm: pulumi.Output; + /** + * Number of replicas to run. + */ + declare public readonly replicas: pulumi.Output; + /** + * Docker Swarm restart policy, as a JSON object. + */ + declare public readonly restartPolicySwarm: pulumi.Output; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + declare public readonly rollbackConfigSwarm: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Grace period in nanoseconds before a container is killed. + */ + declare public readonly stopGracePeriodSwarm: pulumi.Output; + /** + * Docker Swarm ulimits, as a JSON object. + */ + declare public readonly ulimitsSwarm: pulumi.Output; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + declare public readonly updateConfigSwarm: pulumi.Output; + + /** + * Create a MySql 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. + */ + constructor(name: string, args: MySqlArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MySqlArgs | MySqlState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MySqlState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["applicationStatus"] = state?.applicationStatus; + resourceInputs["args"] = state?.args; + resourceInputs["command"] = state?.command; + resourceInputs["cpuLimit"] = state?.cpuLimit; + resourceInputs["cpuReservation"] = state?.cpuReservation; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["databaseName"] = state?.databaseName; + resourceInputs["databasePassword"] = state?.databasePassword; + resourceInputs["databaseRootPassword"] = state?.databaseRootPassword; + resourceInputs["databaseUser"] = state?.databaseUser; + resourceInputs["description"] = state?.description; + resourceInputs["detachDokployNetwork"] = state?.detachDokployNetwork; + resourceInputs["dockerImage"] = state?.dockerImage; + resourceInputs["endpointSpecSwarm"] = state?.endpointSpecSwarm; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["externalPort"] = state?.externalPort; + resourceInputs["healthCheckSwarm"] = state?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = state?.labelsSwarm; + resourceInputs["memoryLimit"] = state?.memoryLimit; + resourceInputs["memoryReservation"] = state?.memoryReservation; + resourceInputs["modeSwarm"] = state?.modeSwarm; + resourceInputs["name"] = state?.name; + resourceInputs["networkIds"] = state?.networkIds; + resourceInputs["networkSwarm"] = state?.networkSwarm; + resourceInputs["placementSwarm"] = state?.placementSwarm; + resourceInputs["replicas"] = state?.replicas; + resourceInputs["restartPolicySwarm"] = state?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = state?.rollbackConfigSwarm; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["stopGracePeriodSwarm"] = state?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = state?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = state?.updateConfigSwarm; + } else { + const args = argsOrState as MySqlArgs | undefined; + if (args?.databaseName === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseName'"); + } + if (args?.databasePassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databasePassword'"); + } + if (args?.databaseRootPassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseRootPassword'"); + } + if (args?.databaseUser === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseUser'"); + } + if (args?.dockerImage === undefined && !opts.urn) { + throw new Error("Missing required property 'dockerImage'"); + } + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["args"] = args?.args; + resourceInputs["command"] = args?.command; + resourceInputs["cpuLimit"] = args?.cpuLimit; + resourceInputs["cpuReservation"] = args?.cpuReservation; + resourceInputs["databaseName"] = args?.databaseName; + resourceInputs["databasePassword"] = args?.databasePassword ? pulumi.secret(args.databasePassword) : undefined; + resourceInputs["databaseRootPassword"] = args?.databaseRootPassword ? pulumi.secret(args.databaseRootPassword) : undefined; + resourceInputs["databaseUser"] = args?.databaseUser; + resourceInputs["description"] = args?.description; + resourceInputs["detachDokployNetwork"] = args?.detachDokployNetwork; + resourceInputs["dockerImage"] = args?.dockerImage; + resourceInputs["endpointSpecSwarm"] = args?.endpointSpecSwarm; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["externalPort"] = args?.externalPort; + resourceInputs["healthCheckSwarm"] = args?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = args?.labelsSwarm; + resourceInputs["memoryLimit"] = args?.memoryLimit; + resourceInputs["memoryReservation"] = args?.memoryReservation; + resourceInputs["modeSwarm"] = args?.modeSwarm; + resourceInputs["name"] = args?.name; + resourceInputs["networkIds"] = args?.networkIds; + resourceInputs["networkSwarm"] = args?.networkSwarm; + resourceInputs["placementSwarm"] = args?.placementSwarm; + resourceInputs["replicas"] = args?.replicas; + resourceInputs["restartPolicySwarm"] = args?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = args?.rollbackConfigSwarm; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["stopGracePeriodSwarm"] = args?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = args?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = args?.updateConfigSwarm; + resourceInputs["applicationStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["databasePassword", "databaseRootPassword"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(MySql.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering MySql resources. + */ +export interface MySqlState { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + applicationStatus?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * RFC 3339 timestamp of when the database was created. + */ + createdAt?: pulumi.Input; + /** + * Name of the database to create. + */ + databaseName?: pulumi.Input; + /** + * Password for the database user. + */ + databasePassword?: pulumi.Input; + /** + * Password for the MySQL `root` user. + */ + databaseRootPassword?: pulumi.Input; + /** + * Database user to create. + */ + databaseUser?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * MySQL image to run, for example `mysql:8`. + */ + dockerImage?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId?: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} + +/** + * The set of arguments for constructing a MySql resource. + */ +export interface MySqlArgs { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Name of the database to create. + */ + databaseName: pulumi.Input; + /** + * Password for the database user. + */ + databasePassword: pulumi.Input; + /** + * Password for the MySQL `root` user. + */ + databaseRootPassword: pulumi.Input; + /** + * Database user to create. + */ + databaseUser: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * MySQL image to run, for example `mysql:8`. + */ + dockerImage: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} diff --git a/sdk/nodejs/package-lock.json b/sdk/nodejs/package-lock.json new file mode 100644 index 0000000..5278f4f --- /dev/null +++ b/sdk/nodejs/package-lock.json @@ -0,0 +1,2683 @@ +{ + "name": "@maxvojtkov/pulumi-dokploy", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@maxvojtkov/pulumi-dokploy", + "version": "0.1.0", + "license": "MPL-2.0", + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^18", + "typescript": "^4.6.0" + } + }, + "node_modules/@gar/promise-retry": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz", + "integrity": "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==", + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.4.tgz", + "integrity": "sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "license": "ISC" + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@logdna/tail-file": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@logdna/tail-file/-/tail-file-2.2.0.tgz", + "integrity": "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==", + "license": "SEE LICENSE IN LICENSE", + "engines": { + "node": ">=10.3.0" + } + }, + "node_modules/@npmcli/agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.2.tgz", + "integrity": "sha512-EUEuWAxnL07Sp5/iC/1X6Xj+XThUvnbei9zfRWZdEXa7lss9RTHMhAHBeg+MZ5To9s/gGaSI+UwZTPdYMvKSeg==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.9.1.tgz", + "integrity": "sha512-K0mr16xJ/yiTApeGIFbpgZSvJFOvxO2VJnCBhP543t9NTlHzgL+ewpG0kaWv9xkjeESAlRWHG9Q4lbT/LqHbWw==", + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^2.0.0", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz", + "integrity": "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw==", + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz", + "integrity": "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==", + "license": "ISC", + "dependencies": { + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz", + "integrity": "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", + "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-5.0.0.tgz", + "integrity": "sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", + "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.220.0.tgz", + "integrity": "sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.10.0.tgz", + "integrity": "sha512-bvyMcgLEkozzSzpEEEo1OMoeQ97bxj6Qs2uN3mPrSdDvObMI1myffD/BPqcLlzZO9//d1SqQA/WPw7Cz2AiqhA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.10.0.tgz", + "integrity": "sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.220.0.tgz", + "integrity": "sha512-bv1xmNhmNwIM6MdUBw4yYuJeVcEViVLk3uD69vOQMwueHBnfyl/u0HnBlB1FNY/Te0UOzJzvcbyR8wN6b+iGbA==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.14.3", + "@opentelemetry/otlp-exporter-base": "0.220.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.220.0", + "@opentelemetry/otlp-transformer": "0.220.0", + "@opentelemetry/sdk-trace": "2.9.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.10.0.tgz", + "integrity": "sha512-7gsvgf0UDoJ4l9ObrwBmz5G/ZogiPk+lq+g5GpLp24YQF/vPM/BSsnOfcLnfinast5ASUgLo78uSC/ObjlnXgg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/sdk-trace": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/sdk-trace": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.10.0.tgz", + "integrity": "sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.220.0.tgz", + "integrity": "sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.220.0", + "import-in-the-middle": "^3.0.0", + "require-in-the-middle": "^8.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.220.0.tgz", + "integrity": "sha512-U1EF8KKu52XwH2ybUkjVDmaVQZGf3mXirRSw1KJQrOV5aymgJgkPJV7+kRPqawZe0rpVc/BK+pPSyMWuQoyJJQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "0.220.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.220.0.tgz", + "integrity": "sha512-CXYo8UD5Mn9YbgebO2EL4wejtA+gxLmLiu6HCk2KH2BR7XhFN6/6p1UlCb23DYCjeYkndevLHuejCCN1yx4+OQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/otlp-transformer": "0.220.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.220.0.tgz", + "integrity": "sha512-/eIkBPMBTIvM3x/0mDX4aJeSkYifYClnBPr68PL1h5LV4VQv4+SV6CGrpiZ4fIWDnobVmhTWCm1J/QRdAWUfvA==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.14.3", + "@opentelemetry/core": "2.9.0", + "@opentelemetry/otlp-exporter-base": "0.220.0", + "@opentelemetry/otlp-transformer": "0.220.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.220.0.tgz", + "integrity": "sha512-lXGrv7KXZ0gNH9SVNUaa6vv6phVYGvJxfXAlMbzbakiXru75f5MZl8Z7oqiMMQD77riVHJCFlQvbZs/VVN2/4A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.220.0", + "@opentelemetry/core": "2.9.0", + "@opentelemetry/resources": "2.9.0", + "@opentelemetry/sdk-logs": "0.220.0", + "@opentelemetry/sdk-metrics": "2.9.0", + "@opentelemetry/sdk-trace": "2.9.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.10.0.tgz", + "integrity": "sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.220.0.tgz", + "integrity": "sha512-WywcTkQtv2iNmt+6y5Kcd4rzvx9bLVsBa2Nwcmg01IUaBTkTow3W4d9KE5vNBpEDtb9tp21WcRBY/lANRrApYA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.220.0", + "@opentelemetry/core": "2.9.0", + "@opentelemetry/resources": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.9.0.tgz", + "integrity": "sha512-Xx8RGS4H5XEBl01WuCreMIpiah9cCXMbSkeuIePPdD2cUpq/vUzYmj8E/MK1OsbOc93FuAD4jfn2WOacKwLn7Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/resources": "2.9.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.9.0.tgz", + "integrity": "sha512-sGA19HvtrrSKYsseHphluH6j3p6Xa3fqc7c7y8f/7mYWejc1lyDFcpSdD1kYa50HCLUeEo4zA5bW0pniaPszuw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/resources": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.10.0.tgz", + "integrity": "sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/sdk-trace": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/sdk-trace": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.10.0.tgz", + "integrity": "sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.10.0.tgz", + "integrity": "sha512-GZK/G6oZyBLGlH1pUgeDch7D91KoHd2uotUGIkWCPi9GI5T9X0p4L7nNAMDR1BQjkRYoDqo+ddfVx9t5Uhys+Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "2.10.0", + "@opentelemetry/core": "2.10.0", + "@opentelemetry/sdk-trace-base": "2.10.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace/node_modules/@opentelemetry/resources": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", + "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", + "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", + "license": "BSD-3-Clause" + }, + "node_modules/@pulumi/pulumi": { + "version": "3.256.0", + "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.256.0.tgz", + "integrity": "sha512-EK1TQieOmxTxbIpX5EKTPpC1WYappH3ASEZzN6Q9gs7rZjuZCATXI9Am8nszmlRdtPlAiVSW8NfQNKCnaNk34A==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.10.1", + "@logdna/tail-file": "^2.0.6", + "@npmcli/arborist": "^9.0.0", + "@opentelemetry/api": "^1.9", + "@opentelemetry/core": "^2.9", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.220", + "@opentelemetry/exporter-zipkin": "^2.9", + "@opentelemetry/instrumentation": "^0.220", + "@opentelemetry/instrumentation-grpc": "^0.220", + "@opentelemetry/resources": "^2.9", + "@opentelemetry/sdk-trace-base": "^2.9", + "@opentelemetry/sdk-trace-node": "^2.9", + "@opentelemetry/semantic-conventions": "^1.42", + "@types/google-protobuf": "^3.15.5", + "@types/semver": "^7.5.6", + "execa": "^5.1.0", + "google-protobuf": "^3.21.4", + "ini": "^2.0.0", + "js-yaml": "^4.0.0", + "minimist": "^1.2.6", + "normalize-package-data": "^6.0.0", + "require-from-string": "^2.0.1", + "semver": "^7.5.2", + "source-map-support": "^0.5.6", + "upath": "^1.1.0" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "ts-node": ">= 7.0.1 < 12", + "typescript": ">= 3.8.3 < 7" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.2.1.tgz", + "integrity": "sha512-qRsxPnCrbC/puegGxKuynfnxgLiHqWStrSjxkoB4YKqq3Z3s4cyZyj42ZdWFAEblNP65C+rBH8EuREHIXoi83g==", + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.1.tgz", + "integrity": "sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g==", + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.1.tgz", + "integrity": "sha512-Hf4xglukg0XXQ2RiD5vSoLjdPe8OBUPA8XeVjUObheuDcWdYWrnH/BNmxZCzkAy68MzmNCxXLeurJvs6hcP2OQ==", + "license": "Apache-2.0", + "dependencies": { + "@gar/promise-retry": "^1.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.4", + "proc-log": "^6.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.2.tgz", + "integrity": "sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.1.tgz", + "integrity": "sha512-qv7+G3J2cc6wwFj3yKvXOamzqhMwSk1ogPGmhpS8iXllcPrJaIIBA+4HbttlHVu1pqWTdmaCH/WE7UOC51kdoA==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", + "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@types/google-protobuf": { + "version": "3.15.12", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.12.tgz", + "integrity": "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==", + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bin-links": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-6.0.2.tgz", + "integrity": "sha512-frE1t78WOwJ45PKV2cF2tNPjTcs9L1J9s6VkrV59wanRP4GlaomuxYPVma7BwthMg8WnfSory4w5PTE6FZZ81w==", + "license": "ISC", + "dependencies": { + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/cacache": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.4.tgz", + "integrity": "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cmd-shim": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-8.0.0.tgz", + "integrity": "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "license": "Apache-2.0" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==", + "license": "(BSD-3-Clause AND Apache-2.0)" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/hosted-git-info": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", + "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/import-in-the-middle": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.3.3.tgz", + "integrity": "sha512-AiohS3H80sXO6owEltjGX+glb7qXaDhBoJb9XcQVH4UI207xu/bDLUcadVKp7Qe576reg9yr/PXZjV5qx8gfbA==", + "license": "Apache-2.0", + "dependencies": { + "cjs-module-lexer": "^2.2.0", + "es-module-lexer": "^2.2.0", + "module-details-from-path": "^1.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ip-address": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.4.0.tgz", + "integrity": "sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "license": "MIT" + }, + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/make-fetch-happen": { + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.6.tgz", + "integrity": "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw==", + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", + "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "license": "ISC", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/npm-bundled": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", + "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", + "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "21.5.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.5.1.tgz", + "integrity": "sha512-KvcJ9iy3crysCsgqc4+PknH/w6jkrp8JN36mpZBPwNaDRwTfMZD37YzRazNstiZUOhuF5pno9f78n9mEJBavwg==", + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/parse-conflict-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-5.0.1.tgz", + "integrity": "sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ==", + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", + "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/proggy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-4.0.0.tgz", + "integrity": "sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/protobufjs": { + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", + "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-6.0.0.tgz", + "integrity": "sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-8.0.1.tgz", + "integrity": "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3" + }, + "engines": { + "node": ">=9.3.0 || >=8.10.0 <9.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "optional": true + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.1.tgz", + "integrity": "sha512-endqECJkfhozrXMK5ngu/UAA0xVcVEFdnHJCElGaExypjW+HK5i6zu3NteLoaX/iFbRUbC3+DjttQs0GARr+5w==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.1", + "@sigstore/tuf": "^4.0.2", + "@sigstore/verify": "^3.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "license": "CC0-1.0" + }, + "node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", + "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/write-file-atomic": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz", + "integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==", + "license": "ISC", + "dependencies": { + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/sdk/nodejs/package.json b/sdk/nodejs/package.json new file mode 100644 index 0000000..1b31750 --- /dev/null +++ b/sdk/nodejs/package.json @@ -0,0 +1,33 @@ +{ + "name": "@maxvojtkov/pulumi-dokploy", + "version": "0.1.0", + "description": "A Pulumi package for creating and managing Dokploy resources. Based on terraform-provider-dokploy: version v0.1.0", + "keywords": [ + "pulumi", + "dokploy", + "paas", + "docker", + "deployment", + "category/cloud", + "category/infrastructure" + ], + "homepage": "https://github.com/maxvojtkov/pulumi-dokploy", + "repository": "https://github.com/maxvojtkov/pulumi-dokploy", + "license": "MPL-2.0", + "scripts": { + "build": "tsc" + }, + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^18", + "typescript": "^4.6.0" + }, + "pulumi": { + "resource": true, + "name": "dokploy", + "version": "0.1.0", + "server": "github://api.github.com/maxvojtkov/pulumi-dokploy" + } +} diff --git a/sdk/nodejs/port.ts b/sdk/nodejs/port.ts new file mode 100644 index 0000000..1ff25e6 --- /dev/null +++ b/sdk/nodejs/port.ts @@ -0,0 +1,149 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Port extends pulumi.CustomResource { + /** + * Get an existing Port 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. + */ + public static get(name: string, id: pulumi.Input, state?: PortState, opts?: pulumi.CustomResourceOptions): Port { + return new Port(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/port:Port'; + + /** + * Returns true if the given object is an instance of Port. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Port { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Port.__pulumiType; + } + + /** + * Application this port belongs to. + */ + declare public readonly applicationId: pulumi.Output; + /** + * Transport protocol. Valid values: `tcp`, `udp`. + */ + declare public readonly protocol: pulumi.Output; + /** + * Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + */ + declare public readonly publishMode: pulumi.Output; + /** + * Port exposed on the host. + */ + declare public readonly publishedPort: pulumi.Output; + /** + * Port the container listens on. + */ + declare public readonly targetPort: pulumi.Output; + + /** + * Create a Port 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. + */ + constructor(name: string, args: PortArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: PortArgs | PortState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as PortState | undefined; + resourceInputs["applicationId"] = state?.applicationId; + resourceInputs["protocol"] = state?.protocol; + resourceInputs["publishMode"] = state?.publishMode; + resourceInputs["publishedPort"] = state?.publishedPort; + resourceInputs["targetPort"] = state?.targetPort; + } else { + const args = argsOrState as PortArgs | undefined; + if (args?.applicationId === undefined && !opts.urn) { + throw new Error("Missing required property 'applicationId'"); + } + if (args?.protocol === undefined && !opts.urn) { + throw new Error("Missing required property 'protocol'"); + } + if (args?.publishedPort === undefined && !opts.urn) { + throw new Error("Missing required property 'publishedPort'"); + } + if (args?.targetPort === undefined && !opts.urn) { + throw new Error("Missing required property 'targetPort'"); + } + resourceInputs["applicationId"] = args?.applicationId; + resourceInputs["protocol"] = args?.protocol; + resourceInputs["publishMode"] = args?.publishMode; + resourceInputs["publishedPort"] = args?.publishedPort; + resourceInputs["targetPort"] = args?.targetPort; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Port.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Port resources. + */ +export interface PortState { + /** + * Application this port belongs to. + */ + applicationId?: pulumi.Input; + /** + * Transport protocol. Valid values: `tcp`, `udp`. + */ + protocol?: pulumi.Input; + /** + * Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + */ + publishMode?: pulumi.Input; + /** + * Port exposed on the host. + */ + publishedPort?: pulumi.Input; + /** + * Port the container listens on. + */ + targetPort?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Port resource. + */ +export interface PortArgs { + /** + * Application this port belongs to. + */ + applicationId: pulumi.Input; + /** + * Transport protocol. Valid values: `tcp`, `udp`. + */ + protocol: pulumi.Input; + /** + * Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + */ + publishMode?: pulumi.Input; + /** + * Port exposed on the host. + */ + publishedPort: pulumi.Input; + /** + * Port the container listens on. + */ + targetPort: pulumi.Input; +} diff --git a/sdk/nodejs/postgres.ts b/sdk/nodejs/postgres.ts new file mode 100644 index 0000000..e06db57 --- /dev/null +++ b/sdk/nodejs/postgres.ts @@ -0,0 +1,538 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Postgres extends pulumi.CustomResource { + /** + * Get an existing Postgres 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. + */ + public static get(name: string, id: pulumi.Input, state?: PostgresState, opts?: pulumi.CustomResourceOptions): Postgres { + return new Postgres(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/postgres:Postgres'; + + /** + * Returns true if the given object is an instance of Postgres. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Postgres { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Postgres.__pulumiType; + } + + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + declare public readonly appName: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly applicationStatus: pulumi.Output; + /** + * Arguments appended to the container command. + */ + declare public readonly args: pulumi.Output; + /** + * Override the container entrypoint command. + */ + declare public readonly command: pulumi.Output; + /** + * Hard CPU limit, for example `1`. + */ + declare public readonly cpuLimit: pulumi.Output; + /** + * Soft CPU reservation, for example `0.5`. + */ + declare public readonly cpuReservation: pulumi.Output; + /** + * RFC 3339 timestamp of when the database was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Name of the database to create. + */ + declare public readonly databaseName: pulumi.Output; + /** + * Password for the database user. + */ + declare public readonly databasePassword: pulumi.Output; + /** + * Database user to create. + */ + declare public readonly databaseUser: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Detach the service from the shared `dokploy-network`. + */ + declare public readonly detachDokployNetwork: pulumi.Output; + /** + * PostgreSQL image to run, for example `postgres:16`. + */ + declare public readonly dockerImage: pulumi.Output; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + declare public readonly endpointSpecSwarm: pulumi.Output; + /** + * Environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this database belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + declare public readonly externalPort: pulumi.Output; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + declare public readonly healthCheckSwarm: pulumi.Output; + /** + * Docker Swarm service labels, as a JSON object. + */ + declare public readonly labelsSwarm: pulumi.Output; + /** + * Hard memory limit, for example `512m`. + */ + declare public readonly memoryLimit: pulumi.Output; + /** + * Soft memory reservation, for example `256m`. + */ + declare public readonly memoryReservation: pulumi.Output; + /** + * Docker Swarm service mode, as a JSON object. + */ + declare public readonly modeSwarm: pulumi.Output; + /** + * Display name of the database. + */ + declare public readonly name: pulumi.Output; + /** + * IDs of additional Docker networks to attach. + */ + declare public readonly networkIds: pulumi.Output; + /** + * Docker Swarm network attachments, as a JSON array. + */ + declare public readonly networkSwarm: pulumi.Output; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + declare public readonly placementSwarm: pulumi.Output; + /** + * Number of replicas to run. + */ + declare public readonly replicas: pulumi.Output; + /** + * Docker Swarm restart policy, as a JSON object. + */ + declare public readonly restartPolicySwarm: pulumi.Output; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + declare public readonly rollbackConfigSwarm: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Grace period in nanoseconds before a container is killed. + */ + declare public readonly stopGracePeriodSwarm: pulumi.Output; + /** + * Docker Swarm ulimits, as a JSON object. + */ + declare public readonly ulimitsSwarm: pulumi.Output; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + declare public readonly updateConfigSwarm: pulumi.Output; + + /** + * Create a Postgres 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. + */ + constructor(name: string, args: PostgresArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: PostgresArgs | PostgresState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as PostgresState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["applicationStatus"] = state?.applicationStatus; + resourceInputs["args"] = state?.args; + resourceInputs["command"] = state?.command; + resourceInputs["cpuLimit"] = state?.cpuLimit; + resourceInputs["cpuReservation"] = state?.cpuReservation; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["databaseName"] = state?.databaseName; + resourceInputs["databasePassword"] = state?.databasePassword; + resourceInputs["databaseUser"] = state?.databaseUser; + resourceInputs["description"] = state?.description; + resourceInputs["detachDokployNetwork"] = state?.detachDokployNetwork; + resourceInputs["dockerImage"] = state?.dockerImage; + resourceInputs["endpointSpecSwarm"] = state?.endpointSpecSwarm; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["externalPort"] = state?.externalPort; + resourceInputs["healthCheckSwarm"] = state?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = state?.labelsSwarm; + resourceInputs["memoryLimit"] = state?.memoryLimit; + resourceInputs["memoryReservation"] = state?.memoryReservation; + resourceInputs["modeSwarm"] = state?.modeSwarm; + resourceInputs["name"] = state?.name; + resourceInputs["networkIds"] = state?.networkIds; + resourceInputs["networkSwarm"] = state?.networkSwarm; + resourceInputs["placementSwarm"] = state?.placementSwarm; + resourceInputs["replicas"] = state?.replicas; + resourceInputs["restartPolicySwarm"] = state?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = state?.rollbackConfigSwarm; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["stopGracePeriodSwarm"] = state?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = state?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = state?.updateConfigSwarm; + } else { + const args = argsOrState as PostgresArgs | undefined; + if (args?.databaseName === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseName'"); + } + if (args?.databasePassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databasePassword'"); + } + if (args?.databaseUser === undefined && !opts.urn) { + throw new Error("Missing required property 'databaseUser'"); + } + if (args?.dockerImage === undefined && !opts.urn) { + throw new Error("Missing required property 'dockerImage'"); + } + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["args"] = args?.args; + resourceInputs["command"] = args?.command; + resourceInputs["cpuLimit"] = args?.cpuLimit; + resourceInputs["cpuReservation"] = args?.cpuReservation; + resourceInputs["databaseName"] = args?.databaseName; + resourceInputs["databasePassword"] = args?.databasePassword ? pulumi.secret(args.databasePassword) : undefined; + resourceInputs["databaseUser"] = args?.databaseUser; + resourceInputs["description"] = args?.description; + resourceInputs["detachDokployNetwork"] = args?.detachDokployNetwork; + resourceInputs["dockerImage"] = args?.dockerImage; + resourceInputs["endpointSpecSwarm"] = args?.endpointSpecSwarm; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["externalPort"] = args?.externalPort; + resourceInputs["healthCheckSwarm"] = args?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = args?.labelsSwarm; + resourceInputs["memoryLimit"] = args?.memoryLimit; + resourceInputs["memoryReservation"] = args?.memoryReservation; + resourceInputs["modeSwarm"] = args?.modeSwarm; + resourceInputs["name"] = args?.name; + resourceInputs["networkIds"] = args?.networkIds; + resourceInputs["networkSwarm"] = args?.networkSwarm; + resourceInputs["placementSwarm"] = args?.placementSwarm; + resourceInputs["replicas"] = args?.replicas; + resourceInputs["restartPolicySwarm"] = args?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = args?.rollbackConfigSwarm; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["stopGracePeriodSwarm"] = args?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = args?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = args?.updateConfigSwarm; + resourceInputs["applicationStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["databasePassword"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Postgres.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Postgres resources. + */ +export interface PostgresState { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + applicationStatus?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * RFC 3339 timestamp of when the database was created. + */ + createdAt?: pulumi.Input; + /** + * Name of the database to create. + */ + databaseName?: pulumi.Input; + /** + * Password for the database user. + */ + databasePassword?: pulumi.Input; + /** + * Database user to create. + */ + databaseUser?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * PostgreSQL image to run, for example `postgres:16`. + */ + dockerImage?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId?: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Postgres resource. + */ +export interface PostgresArgs { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Name of the database to create. + */ + databaseName: pulumi.Input; + /** + * Password for the database user. + */ + databasePassword: pulumi.Input; + /** + * Database user to create. + */ + databaseUser: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * PostgreSQL image to run, for example `postgres:16`. + */ + dockerImage: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} diff --git a/sdk/nodejs/project.ts b/sdk/nodejs/project.ts new file mode 100644 index 0000000..dc614b2 --- /dev/null +++ b/sdk/nodejs/project.ts @@ -0,0 +1,139 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Project extends pulumi.CustomResource { + /** + * Get an existing Project 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. + */ + public static get(name: string, id: pulumi.Input, state?: ProjectState, opts?: pulumi.CustomResourceOptions): Project { + return new Project(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/project:Project'; + + /** + * Returns true if the given object is an instance of Project. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Project { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Project.__pulumiType; + } + + /** + * RFC 3339 timestamp of when the project was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * ID of the `production` environment that Dokploy creates automatically with the project. + */ + declare public /*out*/ readonly defaultEnvironmentId: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + */ + declare public readonly env: pulumi.Output; + /** + * Display name of the project. + */ + declare public readonly name: pulumi.Output; + /** + * Organization that owns the project. + */ + declare public /*out*/ readonly organizationId: pulumi.Output; + + /** + * Create a Project 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. + */ + constructor(name: string, args?: ProjectArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ProjectArgs | ProjectState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ProjectState | undefined; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["defaultEnvironmentId"] = state?.defaultEnvironmentId; + resourceInputs["description"] = state?.description; + resourceInputs["env"] = state?.env; + resourceInputs["name"] = state?.name; + resourceInputs["organizationId"] = state?.organizationId; + } else { + const args = argsOrState as ProjectArgs | undefined; + resourceInputs["description"] = args?.description; + resourceInputs["env"] = args?.env; + resourceInputs["name"] = args?.name; + resourceInputs["createdAt"] = undefined /*out*/; + resourceInputs["defaultEnvironmentId"] = undefined /*out*/; + resourceInputs["organizationId"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Project.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Project resources. + */ +export interface ProjectState { + /** + * RFC 3339 timestamp of when the project was created. + */ + createdAt?: pulumi.Input; + /** + * ID of the `production` environment that Dokploy creates automatically with the project. + */ + defaultEnvironmentId?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + */ + env?: pulumi.Input; + /** + * Display name of the project. + */ + name?: pulumi.Input; + /** + * Organization that owns the project. + */ + organizationId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Project resource. + */ +export interface ProjectArgs { + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + */ + env?: pulumi.Input; + /** + * Display name of the project. + */ + name?: pulumi.Input; +} diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts new file mode 100644 index 0000000..c5e3d02 --- /dev/null +++ b/sdk/nodejs/provider.ts @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +/** + * The provider type for the dokploy package. By default, resources use package-wide configuration + * settings, however an explicit `Provider` instance may be created and passed during resource + * construction to achieve fine-grained programmatic control over provider settings. See the + * [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + */ +export class Provider extends pulumi.ProviderResource { + /** @internal */ + public static readonly __pulumiType = 'dokploy'; + + /** + * Returns true if the given object is an instance of Provider. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Provider { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === "pulumi:providers:" + Provider.__pulumiType; + } + + /** + * API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + */ + declare public readonly apiKey: pulumi.Output; + /** + * Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + */ + declare public readonly host: pulumi.Output; + + /** + * Create a Provider 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. + */ + constructor(name: string, args?: ProviderArgs, opts?: pulumi.ResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + { + resourceInputs["apiKey"] = (args?.apiKey ? pulumi.secret(args.apiKey) : undefined) ?? utilities.getEnv("DOKPLOY_API_KEY"); + resourceInputs["host"] = (args?.host) ?? utilities.getEnv("DOKPLOY_HOST"); + resourceInputs["insecureSkipVerify"] = pulumi.output(args?.insecureSkipVerify).apply(JSON.stringify); + resourceInputs["timeoutSeconds"] = pulumi.output((args?.timeoutSeconds) ?? utilities.getEnvNumber("DOKPLOY_TIMEOUT_SECONDS")).apply(JSON.stringify); + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["apiKey"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Provider.__pulumiType, name, resourceInputs, opts); + } + + /** + * This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider. + */ + terraformConfig(): pulumi.Output { + return pulumi.runtime.call("pulumi:providers:dokploy/terraformConfig", { + "__self__": this, + }, this); + } +} + +/** + * The set of arguments for constructing a Provider resource. + */ +export interface ProviderArgs { + /** + * API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + */ + apiKey?: pulumi.Input; + /** + * Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + */ + host?: pulumi.Input; + /** + * Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + */ + insecureSkipVerify?: pulumi.Input; + /** + * Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + */ + timeoutSeconds?: pulumi.Input; +} + +export namespace Provider { + /** + * The results of the Provider.terraformConfig method. + */ + export interface TerraformConfigResult { + readonly result: {[key: string]: any}; + } + +} diff --git a/sdk/nodejs/redirect.ts b/sdk/nodejs/redirect.ts new file mode 100644 index 0000000..295c98d --- /dev/null +++ b/sdk/nodejs/redirect.ts @@ -0,0 +1,142 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Redirect extends pulumi.CustomResource { + /** + * Get an existing Redirect 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. + */ + public static get(name: string, id: pulumi.Input, state?: RedirectState, opts?: pulumi.CustomResourceOptions): Redirect { + return new Redirect(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/redirect:Redirect'; + + /** + * Returns true if the given object is an instance of Redirect. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Redirect { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Redirect.__pulumiType; + } + + /** + * Application this redirect belongs to. + */ + declare public readonly applicationId: pulumi.Output; + /** + * RFC 3339 timestamp of when the redirect was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Issue a permanent (301) redirect instead of a temporary (302) one. + */ + declare public readonly permanent: pulumi.Output; + /** + * Regular expression matched against the incoming URL. + */ + declare public readonly regex: pulumi.Output; + /** + * Replacement URL, which may reference capture groups such as `${1}`. + */ + declare public readonly replacement: pulumi.Output; + + /** + * Create a Redirect 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. + */ + constructor(name: string, args: RedirectArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RedirectArgs | RedirectState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RedirectState | undefined; + resourceInputs["applicationId"] = state?.applicationId; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["permanent"] = state?.permanent; + resourceInputs["regex"] = state?.regex; + resourceInputs["replacement"] = state?.replacement; + } else { + const args = argsOrState as RedirectArgs | undefined; + if (args?.applicationId === undefined && !opts.urn) { + throw new Error("Missing required property 'applicationId'"); + } + if (args?.regex === undefined && !opts.urn) { + throw new Error("Missing required property 'regex'"); + } + if (args?.replacement === undefined && !opts.urn) { + throw new Error("Missing required property 'replacement'"); + } + resourceInputs["applicationId"] = args?.applicationId; + resourceInputs["permanent"] = args?.permanent; + resourceInputs["regex"] = args?.regex; + resourceInputs["replacement"] = args?.replacement; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Redirect.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Redirect resources. + */ +export interface RedirectState { + /** + * Application this redirect belongs to. + */ + applicationId?: pulumi.Input; + /** + * RFC 3339 timestamp of when the redirect was created. + */ + createdAt?: pulumi.Input; + /** + * Issue a permanent (301) redirect instead of a temporary (302) one. + */ + permanent?: pulumi.Input; + /** + * Regular expression matched against the incoming URL. + */ + regex?: pulumi.Input; + /** + * Replacement URL, which may reference capture groups such as `${1}`. + */ + replacement?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Redirect resource. + */ +export interface RedirectArgs { + /** + * Application this redirect belongs to. + */ + applicationId: pulumi.Input; + /** + * Issue a permanent (301) redirect instead of a temporary (302) one. + */ + permanent?: pulumi.Input; + /** + * Regular expression matched against the incoming URL. + */ + regex: pulumi.Input; + /** + * Replacement URL, which may reference capture groups such as `${1}`. + */ + replacement: pulumi.Input; +} diff --git a/sdk/nodejs/redis.ts b/sdk/nodejs/redis.ts new file mode 100644 index 0000000..29fbdf3 --- /dev/null +++ b/sdk/nodejs/redis.ts @@ -0,0 +1,504 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Redis extends pulumi.CustomResource { + /** + * Get an existing Redis 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. + */ + public static get(name: string, id: pulumi.Input, state?: RedisState, opts?: pulumi.CustomResourceOptions): Redis { + return new Redis(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/redis:Redis'; + + /** + * Returns true if the given object is an instance of Redis. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Redis { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Redis.__pulumiType; + } + + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + declare public readonly appName: pulumi.Output; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + declare public /*out*/ readonly applicationStatus: pulumi.Output; + /** + * Arguments appended to the container command. + */ + declare public readonly args: pulumi.Output; + /** + * Override the container entrypoint command. + */ + declare public readonly command: pulumi.Output; + /** + * Hard CPU limit, for example `1`. + */ + declare public readonly cpuLimit: pulumi.Output; + /** + * Soft CPU reservation, for example `0.5`. + */ + declare public readonly cpuReservation: pulumi.Output; + /** + * RFC 3339 timestamp of when the database was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Password used to authenticate to Redis. + */ + declare public readonly databasePassword: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * Detach the service from the shared `dokploy-network`. + */ + declare public readonly detachDokployNetwork: pulumi.Output; + /** + * Redis image to run, for example `redis:7`. + */ + declare public readonly dockerImage: pulumi.Output; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + declare public readonly endpointSpecSwarm: pulumi.Output; + /** + * Environment variables in `KEY=value` format, one per line. + */ + declare public readonly env: pulumi.Output; + /** + * Environment this database belongs to. + */ + declare public readonly environmentId: pulumi.Output; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + declare public readonly externalPort: pulumi.Output; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + declare public readonly healthCheckSwarm: pulumi.Output; + /** + * Docker Swarm service labels, as a JSON object. + */ + declare public readonly labelsSwarm: pulumi.Output; + /** + * Hard memory limit, for example `512m`. + */ + declare public readonly memoryLimit: pulumi.Output; + /** + * Soft memory reservation, for example `256m`. + */ + declare public readonly memoryReservation: pulumi.Output; + /** + * Docker Swarm service mode, as a JSON object. + */ + declare public readonly modeSwarm: pulumi.Output; + /** + * Display name of the database. + */ + declare public readonly name: pulumi.Output; + /** + * IDs of additional Docker networks to attach. + */ + declare public readonly networkIds: pulumi.Output; + /** + * Docker Swarm network attachments, as a JSON array. + */ + declare public readonly networkSwarm: pulumi.Output; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + declare public readonly placementSwarm: pulumi.Output; + /** + * Number of replicas to run. + */ + declare public readonly replicas: pulumi.Output; + /** + * Docker Swarm restart policy, as a JSON object. + */ + declare public readonly restartPolicySwarm: pulumi.Output; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + declare public readonly rollbackConfigSwarm: pulumi.Output; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + declare public readonly serverId: pulumi.Output; + /** + * Grace period in nanoseconds before a container is killed. + */ + declare public readonly stopGracePeriodSwarm: pulumi.Output; + /** + * Docker Swarm ulimits, as a JSON object. + */ + declare public readonly ulimitsSwarm: pulumi.Output; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + declare public readonly updateConfigSwarm: pulumi.Output; + + /** + * Create a Redis 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. + */ + constructor(name: string, args: RedisArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RedisArgs | RedisState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RedisState | undefined; + resourceInputs["appName"] = state?.appName; + resourceInputs["applicationStatus"] = state?.applicationStatus; + resourceInputs["args"] = state?.args; + resourceInputs["command"] = state?.command; + resourceInputs["cpuLimit"] = state?.cpuLimit; + resourceInputs["cpuReservation"] = state?.cpuReservation; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["databasePassword"] = state?.databasePassword; + resourceInputs["description"] = state?.description; + resourceInputs["detachDokployNetwork"] = state?.detachDokployNetwork; + resourceInputs["dockerImage"] = state?.dockerImage; + resourceInputs["endpointSpecSwarm"] = state?.endpointSpecSwarm; + resourceInputs["env"] = state?.env; + resourceInputs["environmentId"] = state?.environmentId; + resourceInputs["externalPort"] = state?.externalPort; + resourceInputs["healthCheckSwarm"] = state?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = state?.labelsSwarm; + resourceInputs["memoryLimit"] = state?.memoryLimit; + resourceInputs["memoryReservation"] = state?.memoryReservation; + resourceInputs["modeSwarm"] = state?.modeSwarm; + resourceInputs["name"] = state?.name; + resourceInputs["networkIds"] = state?.networkIds; + resourceInputs["networkSwarm"] = state?.networkSwarm; + resourceInputs["placementSwarm"] = state?.placementSwarm; + resourceInputs["replicas"] = state?.replicas; + resourceInputs["restartPolicySwarm"] = state?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = state?.rollbackConfigSwarm; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["stopGracePeriodSwarm"] = state?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = state?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = state?.updateConfigSwarm; + } else { + const args = argsOrState as RedisArgs | undefined; + if (args?.databasePassword === undefined && !opts.urn) { + throw new Error("Missing required property 'databasePassword'"); + } + if (args?.dockerImage === undefined && !opts.urn) { + throw new Error("Missing required property 'dockerImage'"); + } + if (args?.environmentId === undefined && !opts.urn) { + throw new Error("Missing required property 'environmentId'"); + } + resourceInputs["appName"] = args?.appName; + resourceInputs["args"] = args?.args; + resourceInputs["command"] = args?.command; + resourceInputs["cpuLimit"] = args?.cpuLimit; + resourceInputs["cpuReservation"] = args?.cpuReservation; + resourceInputs["databasePassword"] = args?.databasePassword ? pulumi.secret(args.databasePassword) : undefined; + resourceInputs["description"] = args?.description; + resourceInputs["detachDokployNetwork"] = args?.detachDokployNetwork; + resourceInputs["dockerImage"] = args?.dockerImage; + resourceInputs["endpointSpecSwarm"] = args?.endpointSpecSwarm; + resourceInputs["env"] = args?.env; + resourceInputs["environmentId"] = args?.environmentId; + resourceInputs["externalPort"] = args?.externalPort; + resourceInputs["healthCheckSwarm"] = args?.healthCheckSwarm; + resourceInputs["labelsSwarm"] = args?.labelsSwarm; + resourceInputs["memoryLimit"] = args?.memoryLimit; + resourceInputs["memoryReservation"] = args?.memoryReservation; + resourceInputs["modeSwarm"] = args?.modeSwarm; + resourceInputs["name"] = args?.name; + resourceInputs["networkIds"] = args?.networkIds; + resourceInputs["networkSwarm"] = args?.networkSwarm; + resourceInputs["placementSwarm"] = args?.placementSwarm; + resourceInputs["replicas"] = args?.replicas; + resourceInputs["restartPolicySwarm"] = args?.restartPolicySwarm; + resourceInputs["rollbackConfigSwarm"] = args?.rollbackConfigSwarm; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["stopGracePeriodSwarm"] = args?.stopGracePeriodSwarm; + resourceInputs["ulimitsSwarm"] = args?.ulimitsSwarm; + resourceInputs["updateConfigSwarm"] = args?.updateConfigSwarm; + resourceInputs["applicationStatus"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["databasePassword"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Redis.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Redis resources. + */ +export interface RedisState { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + */ + applicationStatus?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * RFC 3339 timestamp of when the database was created. + */ + createdAt?: pulumi.Input; + /** + * Password used to authenticate to Redis. + */ + databasePassword?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * Redis image to run, for example `redis:7`. + */ + dockerImage?: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId?: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Redis resource. + */ +export interface RedisArgs { + /** + * Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + */ + appName?: pulumi.Input; + /** + * Arguments appended to the container command. + */ + args?: pulumi.Input[]>; + /** + * Override the container entrypoint command. + */ + command?: pulumi.Input; + /** + * Hard CPU limit, for example `1`. + */ + cpuLimit?: pulumi.Input; + /** + * Soft CPU reservation, for example `0.5`. + */ + cpuReservation?: pulumi.Input; + /** + * Password used to authenticate to Redis. + */ + databasePassword: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Detach the service from the shared `dokploy-network`. + */ + detachDokployNetwork?: pulumi.Input; + /** + * Redis image to run, for example `redis:7`. + */ + dockerImage: pulumi.Input; + /** + * Docker Swarm endpoint specification, as a JSON object. + */ + endpointSpecSwarm?: pulumi.Input; + /** + * Environment variables in `KEY=value` format, one per line. + */ + env?: pulumi.Input; + /** + * Environment this database belongs to. + */ + environmentId: pulumi.Input; + /** + * Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + */ + externalPort?: pulumi.Input; + /** + * Docker Swarm health check configuration, as a JSON object. + */ + healthCheckSwarm?: pulumi.Input; + /** + * Docker Swarm service labels, as a JSON object. + */ + labelsSwarm?: pulumi.Input; + /** + * Hard memory limit, for example `512m`. + */ + memoryLimit?: pulumi.Input; + /** + * Soft memory reservation, for example `256m`. + */ + memoryReservation?: pulumi.Input; + /** + * Docker Swarm service mode, as a JSON object. + */ + modeSwarm?: pulumi.Input; + /** + * Display name of the database. + */ + name?: pulumi.Input; + /** + * IDs of additional Docker networks to attach. + */ + networkIds?: pulumi.Input[]>; + /** + * Docker Swarm network attachments, as a JSON array. + */ + networkSwarm?: pulumi.Input; + /** + * Docker Swarm placement constraints, as a JSON object. + */ + placementSwarm?: pulumi.Input; + /** + * Number of replicas to run. + */ + replicas?: pulumi.Input; + /** + * Docker Swarm restart policy, as a JSON object. + */ + restartPolicySwarm?: pulumi.Input; + /** + * Docker Swarm rollback configuration, as a JSON object. + */ + rollbackConfigSwarm?: pulumi.Input; + /** + * Remote server to deploy on. Omit to use the Dokploy host itself. + */ + serverId?: pulumi.Input; + /** + * Grace period in nanoseconds before a container is killed. + */ + stopGracePeriodSwarm?: pulumi.Input; + /** + * Docker Swarm ulimits, as a JSON object. + */ + ulimitsSwarm?: pulumi.Input; + /** + * Docker Swarm rolling update configuration, as a JSON object. + */ + updateConfigSwarm?: pulumi.Input; +} diff --git a/sdk/nodejs/registry.ts b/sdk/nodejs/registry.ts new file mode 100644 index 0000000..f394216 --- /dev/null +++ b/sdk/nodejs/registry.ts @@ -0,0 +1,189 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Registry extends pulumi.CustomResource { + /** + * Get an existing Registry 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. + */ + public static get(name: string, id: pulumi.Input, state?: RegistryState, opts?: pulumi.CustomResourceOptions): Registry { + return new Registry(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/registry:Registry'; + + /** + * Returns true if the given object is an instance of Registry. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Registry { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Registry.__pulumiType; + } + + /** + * RFC 3339 timestamp of when the registry was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Prefix prepended to pushed image names, for example an organization or namespace. + */ + declare public readonly imagePrefix: pulumi.Output; + /** + * Password or access token used to authenticate. + */ + declare public readonly password: pulumi.Output; + /** + * Display name of the registry. + */ + declare public readonly registryName: pulumi.Output; + /** + * Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + */ + declare public readonly registryType: pulumi.Output; + /** + * Registry hostname, for example `ghcr.io`. + */ + declare public readonly registryUrl: pulumi.Output; + /** + * Server this registry is scoped to. + */ + declare public readonly serverId: pulumi.Output; + /** + * Username used to authenticate to the registry. + */ + declare public readonly username: pulumi.Output; + + /** + * Create a Registry 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. + */ + constructor(name: string, args: RegistryArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RegistryArgs | RegistryState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RegistryState | undefined; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["imagePrefix"] = state?.imagePrefix; + resourceInputs["password"] = state?.password; + resourceInputs["registryName"] = state?.registryName; + resourceInputs["registryType"] = state?.registryType; + resourceInputs["registryUrl"] = state?.registryUrl; + resourceInputs["serverId"] = state?.serverId; + resourceInputs["username"] = state?.username; + } else { + const args = argsOrState as RegistryArgs | undefined; + if (args?.password === undefined && !opts.urn) { + throw new Error("Missing required property 'password'"); + } + if (args?.registryName === undefined && !opts.urn) { + throw new Error("Missing required property 'registryName'"); + } + if (args?.registryUrl === undefined && !opts.urn) { + throw new Error("Missing required property 'registryUrl'"); + } + if (args?.username === undefined && !opts.urn) { + throw new Error("Missing required property 'username'"); + } + resourceInputs["imagePrefix"] = args?.imagePrefix; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; + resourceInputs["registryName"] = args?.registryName; + resourceInputs["registryType"] = args?.registryType; + resourceInputs["registryUrl"] = args?.registryUrl; + resourceInputs["serverId"] = args?.serverId; + resourceInputs["username"] = args?.username; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["password"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Registry.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Registry resources. + */ +export interface RegistryState { + /** + * RFC 3339 timestamp of when the registry was created. + */ + createdAt?: pulumi.Input; + /** + * Prefix prepended to pushed image names, for example an organization or namespace. + */ + imagePrefix?: pulumi.Input; + /** + * Password or access token used to authenticate. + */ + password?: pulumi.Input; + /** + * Display name of the registry. + */ + registryName?: pulumi.Input; + /** + * Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + */ + registryType?: pulumi.Input; + /** + * Registry hostname, for example `ghcr.io`. + */ + registryUrl?: pulumi.Input; + /** + * Server this registry is scoped to. + */ + serverId?: pulumi.Input; + /** + * Username used to authenticate to the registry. + */ + username?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Registry resource. + */ +export interface RegistryArgs { + /** + * Prefix prepended to pushed image names, for example an organization or namespace. + */ + imagePrefix?: pulumi.Input; + /** + * Password or access token used to authenticate. + */ + password: pulumi.Input; + /** + * Display name of the registry. + */ + registryName: pulumi.Input; + /** + * Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + */ + registryType?: pulumi.Input; + /** + * Registry hostname, for example `ghcr.io`. + */ + registryUrl: pulumi.Input; + /** + * Server this registry is scoped to. + */ + serverId?: pulumi.Input; + /** + * Username used to authenticate to the registry. + */ + username: pulumi.Input; +} diff --git a/sdk/nodejs/security.ts b/sdk/nodejs/security.ts new file mode 100644 index 0000000..7bf5d41 --- /dev/null +++ b/sdk/nodejs/security.ts @@ -0,0 +1,130 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Security extends pulumi.CustomResource { + /** + * Get an existing Security 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. + */ + public static get(name: string, id: pulumi.Input, state?: SecurityState, opts?: pulumi.CustomResourceOptions): Security { + return new Security(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/security:Security'; + + /** + * Returns true if the given object is an instance of Security. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Security { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Security.__pulumiType; + } + + /** + * Application these credentials protect. + */ + declare public readonly applicationId: pulumi.Output; + /** + * RFC 3339 timestamp of when the credentials were created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Basic auth password. + */ + declare public readonly password: pulumi.Output; + /** + * Basic auth username. + */ + declare public readonly username: pulumi.Output; + + /** + * Create a Security 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. + */ + constructor(name: string, args: SecurityArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: SecurityArgs | SecurityState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as SecurityState | undefined; + resourceInputs["applicationId"] = state?.applicationId; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["password"] = state?.password; + resourceInputs["username"] = state?.username; + } else { + const args = argsOrState as SecurityArgs | undefined; + if (args?.applicationId === undefined && !opts.urn) { + throw new Error("Missing required property 'applicationId'"); + } + if (args?.password === undefined && !opts.urn) { + throw new Error("Missing required property 'password'"); + } + if (args?.username === undefined && !opts.urn) { + throw new Error("Missing required property 'username'"); + } + resourceInputs["applicationId"] = args?.applicationId; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; + resourceInputs["username"] = args?.username; + resourceInputs["createdAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["password"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Security.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Security resources. + */ +export interface SecurityState { + /** + * Application these credentials protect. + */ + applicationId?: pulumi.Input; + /** + * RFC 3339 timestamp of when the credentials were created. + */ + createdAt?: pulumi.Input; + /** + * Basic auth password. + */ + password?: pulumi.Input; + /** + * Basic auth username. + */ + username?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Security resource. + */ +export interface SecurityArgs { + /** + * Application these credentials protect. + */ + applicationId: pulumi.Input; + /** + * Basic auth password. + */ + password: pulumi.Input; + /** + * Basic auth username. + */ + username: pulumi.Input; +} diff --git a/sdk/nodejs/sshKey.ts b/sdk/nodejs/sshKey.ts new file mode 100644 index 0000000..7765665 --- /dev/null +++ b/sdk/nodejs/sshKey.ts @@ -0,0 +1,151 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class SshKey extends pulumi.CustomResource { + /** + * Get an existing SshKey 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. + */ + public static get(name: string, id: pulumi.Input, state?: SshKeyState, opts?: pulumi.CustomResourceOptions): SshKey { + return new SshKey(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'dokploy:index/sshKey:SshKey'; + + /** + * Returns true if the given object is an instance of SshKey. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is SshKey { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === SshKey.__pulumiType; + } + + /** + * RFC 3339 timestamp of when the key was created. + */ + declare public /*out*/ readonly createdAt: pulumi.Output; + /** + * Free-form description. + */ + declare public readonly description: pulumi.Output; + /** + * RFC 3339 timestamp of when the key was last used, if ever. + */ + declare public /*out*/ readonly lastUsedAt: pulumi.Output; + /** + * Display name of the key pair. + */ + declare public readonly name: pulumi.Output; + /** + * PEM-encoded private key. + */ + declare public readonly privateKey: pulumi.Output; + /** + * OpenSSH-formatted public key. + */ + declare public readonly publicKey: pulumi.Output; + + /** + * Create a SshKey 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. + */ + constructor(name: string, args: SshKeyArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: SshKeyArgs | SshKeyState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as SshKeyState | undefined; + resourceInputs["createdAt"] = state?.createdAt; + resourceInputs["description"] = state?.description; + resourceInputs["lastUsedAt"] = state?.lastUsedAt; + resourceInputs["name"] = state?.name; + resourceInputs["privateKey"] = state?.privateKey; + resourceInputs["publicKey"] = state?.publicKey; + } else { + const args = argsOrState as SshKeyArgs | undefined; + if (args?.privateKey === undefined && !opts.urn) { + throw new Error("Missing required property 'privateKey'"); + } + if (args?.publicKey === undefined && !opts.urn) { + throw new Error("Missing required property 'publicKey'"); + } + resourceInputs["description"] = args?.description; + resourceInputs["name"] = args?.name; + resourceInputs["privateKey"] = args?.privateKey ? pulumi.secret(args.privateKey) : undefined; + resourceInputs["publicKey"] = args?.publicKey; + resourceInputs["createdAt"] = undefined /*out*/; + resourceInputs["lastUsedAt"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["privateKey"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(SshKey.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering SshKey resources. + */ +export interface SshKeyState { + /** + * RFC 3339 timestamp of when the key was created. + */ + createdAt?: pulumi.Input; + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * RFC 3339 timestamp of when the key was last used, if ever. + */ + lastUsedAt?: pulumi.Input; + /** + * Display name of the key pair. + */ + name?: pulumi.Input; + /** + * PEM-encoded private key. + */ + privateKey?: pulumi.Input; + /** + * OpenSSH-formatted public key. + */ + publicKey?: pulumi.Input; +} + +/** + * The set of arguments for constructing a SshKey resource. + */ +export interface SshKeyArgs { + /** + * Free-form description. + */ + description?: pulumi.Input; + /** + * Display name of the key pair. + */ + name?: pulumi.Input; + /** + * PEM-encoded private key. + */ + privateKey: pulumi.Input; + /** + * OpenSSH-formatted public key. + */ + publicKey: pulumi.Input; +} diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json new file mode 100644 index 0000000..d682cf1 --- /dev/null +++ b/sdk/nodejs/tsconfig.json @@ -0,0 +1,48 @@ +{ + "compilerOptions": { + "outDir": "bin", + "target": "ES2020", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "sourceMap": true, + "stripInternal": true, + "experimentalDecorators": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "strict": true + }, + "files": [ + "application.ts", + "certificate.ts", + "compose.ts", + "config/index.ts", + "config/vars.ts", + "destination.ts", + "domain.ts", + "environment.ts", + "getApplication.ts", + "getEnvironment.ts", + "getProject.ts", + "getProjects.ts", + "getServers.ts", + "index.ts", + "mariaDb.ts", + "mongo.ts", + "mount.ts", + "mySql.ts", + "port.ts", + "postgres.ts", + "project.ts", + "provider.ts", + "redirect.ts", + "redis.ts", + "registry.ts", + "security.ts", + "sshKey.ts", + "types/index.ts", + "types/input.ts", + "types/output.ts", + "utilities.ts" + ] +} diff --git a/sdk/nodejs/types/index.ts b/sdk/nodejs/types/index.ts new file mode 100644 index 0000000..f0db274 --- /dev/null +++ b/sdk/nodejs/types/index.ts @@ -0,0 +1,13 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as utilities from "../utilities"; + +// Export sub-modules: +import * as input from "./input"; +import * as output from "./output"; + +export { + input, + output, +}; diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts new file mode 100644 index 0000000..7ec3963 --- /dev/null +++ b/sdk/nodejs/types/input.ts @@ -0,0 +1,7 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; + diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts new file mode 100644 index 0000000..1f17188 --- /dev/null +++ b/sdk/nodejs/types/output.ts @@ -0,0 +1,27 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; + +export interface GetProjectEnvironment { + id: string; + isDefault: boolean; + name: string; +} + +export interface GetProjectsProject { + defaultEnvironmentId: string; + description: string; + id: string; + name: string; +} + +export interface GetServersServer { + id: string; + ipAddress: string; + name: string; + serverStatus: string; +} + diff --git a/sdk/nodejs/utilities.ts b/sdk/nodejs/utilities.ts new file mode 100644 index 0000000..1eb5d8a --- /dev/null +++ b/sdk/nodejs/utilities.ts @@ -0,0 +1,96 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + + +import * as runtime from "@pulumi/pulumi/runtime"; +import * as pulumi from "@pulumi/pulumi"; + +export function getEnv(...vars: string[]): string | undefined { + for (const v of vars) { + const value = process.env[v]; + if (value) { + return value; + } + } + return undefined; +} + +export function getEnvBoolean(...vars: string[]): boolean | undefined { + const s = getEnv(...vars); + if (s !== undefined) { + // NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what + // Terraform uses internally when parsing boolean values. + if (["1", "t", "T", "true", "TRUE", "True"].find(v => v === s) !== undefined) { + return true; + } + if (["0", "f", "F", "false", "FALSE", "False"].find(v => v === s) !== undefined) { + return false; + } + } + return undefined; +} + +export function getEnvNumber(...vars: string[]): number | undefined { + const s = getEnv(...vars); + if (s !== undefined) { + const f = parseFloat(s); + if (!isNaN(f)) { + return f; + } + } + return undefined; +} + +export function getVersion(): string { + let version = require('./package.json').version; + // Node allows for the version to be prefixed by a "v", while semver doesn't. + // If there is a v, strip it off. + if (version.indexOf('v') === 0) { + version = version.slice(1); + } + return version; +} + +/** @internal */ +export function resourceOptsDefaults(): any { + return { version: getVersion(), pluginDownloadURL: "github://api.github.com/maxvojtkov/pulumi-dokploy" }; +} + +/** @internal */ +export function lazyLoad(exports: any, props: string[], loadModule: any) { + for (let property of props) { + Object.defineProperty(exports, property, { + enumerable: true, + get: function() { + return loadModule()[property]; + }, + }); + } +} + +/** @internal */ +export async function callAsync( + tok: string, + props: pulumi.Inputs, + res?: pulumi.Resource, + opts?: {property?: string}, +): Promise { + const o: any = runtime.call(tok, props, res); + const value = await o.promise(true /*withUnknowns*/); + const isKnown = await o.isKnown; + const isSecret = await o.isSecret; + const problem: string|undefined = + !isKnown ? "an unknown value" + : isSecret ? "a secret value" + : undefined; + // Ingoring o.resources silently. They are typically non-empty, r.f() calls include r as a dependency. + if (problem) { + throw new Error(`Plain resource method "${tok}" incorrectly returned ${problem}. ` + + "This is an error in the provider, please report this to the provider developer."); + } + // Extract a single property if requested. + if (opts && opts.property) { + return value[opts.property]; + } + return value; +} diff --git a/sdk/python/.gitattributes b/sdk/python/.gitattributes new file mode 100644 index 0000000..aae64e2 --- /dev/null +++ b/sdk/python/.gitattributes @@ -0,0 +1 @@ +* linguist-generated diff --git a/sdk/python/.gitignore b/sdk/python/.gitignore new file mode 100644 index 0000000..f9d5cf1 --- /dev/null +++ b/sdk/python/.gitignore @@ -0,0 +1,6 @@ +*.pyc +__pycache__ +.mypy_cache +dist +build +*.egg-info diff --git a/sdk/python/LICENSE b/sdk/python/LICENSE new file mode 100644 index 0000000..77ea901 --- /dev/null +++ b/sdk/python/LICENSE @@ -0,0 +1,356 @@ +Copyright (c) 2026 Max Vojtkov + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + diff --git a/sdk/python/Pulumi.yaml b/sdk/python/Pulumi.yaml new file mode 100644 index 0000000..b5aabef --- /dev/null +++ b/sdk/python/Pulumi.yaml @@ -0,0 +1,3 @@ +name: dokploy +description: A Pulumi resource provider for dokploy. +language: python diff --git a/sdk/python/README.md b/sdk/python/README.md new file mode 100644 index 0000000..e7dbe6e --- /dev/null +++ b/sdk/python/README.md @@ -0,0 +1,206 @@ +# pulumi-dokploy + +A Pulumi provider for [Dokploy](https://dokploy.com): projects, environments, +applications, Compose stacks, managed databases, domains, mounts, ports, +redirects, basic auth, registries, SSH keys, certificates and backup +destinations. + +This is a *bridged* provider. All of the behaviour lives in +[`terraform-provider-dokploy`](https://github.com/maxvojtkov/terraform-provider-dokploy); +[`pulumi-terraform-bridge`](https://github.com/pulumi/pulumi-terraform-bridge) +turns it into a Pulumi package with typed SDKs for TypeScript, Python, Go and +.NET. The two providers stay in lockstep — a resource added upstream shows up +here after a `make tfgen`. + +```ts +import * as dokploy from "@maxvojtkov/pulumi-dokploy"; + +const shop = new dokploy.Project("shop", { name: "shop" }); + +const db = new dokploy.Postgres("db", { + name: "shop-db", + environmentId: shop.defaultEnvironmentId, + dockerImage: "postgres:16-alpine", + databaseName: "shop", + databaseUser: "shop", + databasePassword: dbPassword, +}); + +const api = new dokploy.Application("api", { + name: "api", + environmentId: shop.defaultEnvironmentId, + sourceType: "docker", + dockerImage: "ghcr.io/acme/api:1.4.0", + env: pulumi.interpolate`DATABASE_URL=postgresql://shop:${dbPassword}@${db.appName}:5432/shop`, +}); + +new dokploy.Domain("api", { + applicationId: api.id, + domainType: "application", + host: "api.example.com", + port: 3000, + https: true, + certificateType: "letsencrypt", +}); +``` + +## Contents + +- [Installing](#installing) +- [Configuration](#configuration) +- [Resources and data sources](#resources-and-data-sources) +- [Differences from the Terraform provider](#differences-from-the-terraform-provider) +- [Examples](#examples) +- [Development](#development) +- [Releasing](#releasing) + +## Installing + +The SDKs are published per language; the plugin binary is resolved +automatically from this repository's GitHub releases. + +```bash +# TypeScript / JavaScript +npm install @maxvojtkov/pulumi-dokploy + +# Python +pip install pulumi_dokploy + +# Go +go get github.com/maxvojtkov/pulumi-dokploy/sdk/go/dokploy + +# .NET +dotnet add package Maxvojtkov.Dokploy +``` + +Before the first release, build and install it locally instead: + +```bash +make install VERSION=0.1.0 +``` + +That drops `pulumi-resource-dokploy` into the local plugin cache, so +`pulumi up` finds it without a network fetch. + +### Do I need the static SDK? + +Not necessarily. Pulumi can consume the Terraform provider directly, with no +build step and no published SDK: + +```bash +pulumi package add terraform-provider maxvojtkov/dokploy +``` + +That generates a local SDK on the spot and is the fastest way to try things. +Use this repository when you want a *versioned, published* package — stable +tokens across releases, real package-manager installs, and SDKs your teammates +can depend on without a codegen step. + +## Configuration + +| Setting | Environment variable | Required | Description | +| ---------------------- | ------------------------- | -------- | --------------------------------------------------------------------------- | +| `dokploy:host` | `DOKPLOY_HOST` | yes | Base URL of the instance, e.g. `https://dokploy.example.com`. Trailing `/api` optional. | +| `dokploy:apiKey` | `DOKPLOY_API_KEY` | yes | Token from *Settings → Profile → API/CLI*. Always treated as a secret. | +| `dokploy:timeoutSeconds` | `DOKPLOY_TIMEOUT_SECONDS` | no | Per-request timeout. Defaults to `60`. | +| `dokploy:insecureSkipVerify` | — | no | Skip TLS verification. Only for self-signed certificates. | + +```bash +pulumi config set dokploy:host https://dokploy.example.com +pulumi config set --secret dokploy:apiKey "$DOKPLOY_API_KEY" +``` + +## Resources and data sources + +| Group | Resources | +| ------------ | ------------------------------------------------------------------------- | +| Structure | `Project`, `Environment` | +| Services | `Application`, `Compose` | +| Databases | `Postgres`, `MySql`, `MariaDb`, `Mongo`, `Redis` | +| Networking | `Domain`, `Mount`, `Port`, `Redirect`, `Security` | +| Account | `Registry`, `SshKey`, `Certificate`, `Destination` | + +Data sources: `getProject`, `getProjects`, `getEnvironment`, `getApplication`, +`getServers`. + +## Differences from the Terraform provider + +Everything is a mechanical translation of the Terraform provider, with three +Pulumi conventions applied on top: + +- **Attribute names are camelCase.** `environment_id` → `environmentId`, + `default_environment_id` → `defaultEnvironmentId`, and so on. +- **`name` is auto-generated when you omit it.** Pulumi appends a random + suffix to the logical resource name, the same way the AWS provider does. Pass + `name` explicitly whenever the Dokploy-side name matters to you. +- **The `web-service` Terraform module has no direct equivalent.** Write it as + a [ComponentResource](https://www.pulumi.com/docs/concepts/resources/components/) + instead — see [`examples/typescript/webService.ts`](examples/typescript/webService.ts), + which is a port of that module. + +The [known API quirks](https://github.com/maxvojtkov/terraform-provider-dokploy#known-api-quirks) +documented upstream apply here unchanged, because it is the same code doing the +work. + +## Examples + +- [`examples/typescript`](examples/typescript) — a full environment: project, + staging environment, Postgres, Redis, a GitHub-built web service behind a + domain, a basic-auth-protected internal tool, and a Compose stack. +- [`examples/python`](examples/python) — a small project, database and app. + +## Development + +Requirements: Go 1.25+, Node 20+, Python 3.9+, .NET 8+, and `pulumi`. + +```bash +make tfgen # regenerate schema.json and bridge-metadata.json +make provider # build the plugin binary into bin/ +make build_sdks # regenerate all four SDKs +make install # install the plugin into the local Pulumi plugin cache +make lint test +``` + +`provider/resources.go` is the whole mapping layer: Terraform type names to +Pulumi tokens, and Terraform provider configuration to Pulumi configuration. +Adding an upstream resource means adding one line there and re-running +`make tfgen build_sdks`. + +### The upstream dependency + +`provider/go.mod` currently carries: + +``` +replace github.com/maxvojtkov/terraform-provider-dokploy => ../../dokploy-teraform +``` + +so the two repositories can be developed side by side. CI reproduces that +layout by checking the upstream provider out as a sibling directory. Once +`terraform-provider-dokploy` is tagged on GitHub, drop the `replace` and pin a +real version instead: + +```bash +cd provider && go mod edit -dropreplace github.com/maxvojtkov/terraform-provider-dokploy \ + && go get github.com/maxvojtkov/terraform-provider-dokploy@v0.1.0 +``` + +The upstream provider exposes itself through its `shim` package +(`shim.NewProvider(version)`), because `internal/provider` is not importable +from outside that module. + +## Releasing + +Tag the repository and the `release` workflow does the rest: + +```bash +git tag v0.1.0 && git push origin v0.1.0 +``` + +It publishes plugin binaries to a GitHub release via GoReleaser, pushes the +npm / PyPI / NuGet packages, and commits and tags the Go SDK as `sdk/v0.1.0`. +The workflow needs three repository secrets: `NPM_TOKEN`, `PYPI_API_TOKEN` and +`NUGET_PUBLISH_KEY`. + +## License + +[MPL-2.0](LICENSE). diff --git a/sdk/python/pulumi_dokploy/README.md b/sdk/python/pulumi_dokploy/README.md new file mode 100644 index 0000000..4940984 --- /dev/null +++ b/sdk/python/pulumi_dokploy/README.md @@ -0,0 +1,4 @@ +> This provider is a derived work of the [Terraform Provider](https://github.com/maxvojtkov/terraform-provider-dokploy) +> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature, +> first check the [`pulumi-dokploy` repo](https://github.com/maxvojtkov/pulumi-dokploy/issues); however, if that doesn't turn up anything, +> please consult the source [`terraform-provider-dokploy` repo](https://github.com/maxvojtkov/terraform-provider-dokploy/issues). \ No newline at end of file diff --git a/sdk/python/pulumi_dokploy/__init__.py b/sdk/python/pulumi_dokploy/__init__.py new file mode 100644 index 0000000..db9b51c --- /dev/null +++ b/sdk/python/pulumi_dokploy/__init__.py @@ -0,0 +1,201 @@ +# 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 +from . import _utilities +import typing +# Export this package's modules as members: +from .application import * +from .certificate import * +from .compose import * +from .destination import * +from .domain import * +from .environment import * +from .get_application import * +from .get_environment import * +from .get_project import * +from .get_projects import * +from .get_servers import * +from .maria_db import * +from .mongo import * +from .mount import * +from .my_sql import * +from .port import * +from .postgres import * +from .project import * +from .provider import * +from .redirect import * +from .redis import * +from .registry import * +from .security import * +from .ssh_key import * +from . import outputs + +# Make subpackages available: +if typing.TYPE_CHECKING: + import pulumi_dokploy.config as __config + config = __config +else: + config = _utilities.lazy_import('pulumi_dokploy.config') + +_utilities.register( + resource_modules=""" +[ + { + "pkg": "dokploy", + "mod": "index/application", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/application:Application": "Application" + } + }, + { + "pkg": "dokploy", + "mod": "index/certificate", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/certificate:Certificate": "Certificate" + } + }, + { + "pkg": "dokploy", + "mod": "index/compose", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/compose:Compose": "Compose" + } + }, + { + "pkg": "dokploy", + "mod": "index/destination", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/destination:Destination": "Destination" + } + }, + { + "pkg": "dokploy", + "mod": "index/domain", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/domain:Domain": "Domain" + } + }, + { + "pkg": "dokploy", + "mod": "index/environment", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/environment:Environment": "Environment" + } + }, + { + "pkg": "dokploy", + "mod": "index/mariaDb", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/mariaDb:MariaDb": "MariaDb" + } + }, + { + "pkg": "dokploy", + "mod": "index/mongo", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/mongo:Mongo": "Mongo" + } + }, + { + "pkg": "dokploy", + "mod": "index/mount", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/mount:Mount": "Mount" + } + }, + { + "pkg": "dokploy", + "mod": "index/mySql", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/mySql:MySql": "MySql" + } + }, + { + "pkg": "dokploy", + "mod": "index/port", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/port:Port": "Port" + } + }, + { + "pkg": "dokploy", + "mod": "index/postgres", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/postgres:Postgres": "Postgres" + } + }, + { + "pkg": "dokploy", + "mod": "index/project", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/project:Project": "Project" + } + }, + { + "pkg": "dokploy", + "mod": "index/redirect", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/redirect:Redirect": "Redirect" + } + }, + { + "pkg": "dokploy", + "mod": "index/redis", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/redis:Redis": "Redis" + } + }, + { + "pkg": "dokploy", + "mod": "index/registry", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/registry:Registry": "Registry" + } + }, + { + "pkg": "dokploy", + "mod": "index/security", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/security:Security": "Security" + } + }, + { + "pkg": "dokploy", + "mod": "index/sshKey", + "fqn": "pulumi_dokploy", + "classes": { + "dokploy:index/sshKey:SshKey": "SshKey" + } + } +] +""", + resource_packages=""" +[ + { + "pkg": "dokploy", + "token": "pulumi:providers:dokploy", + "fqn": "pulumi_dokploy", + "class": "Provider" + } +] +""" +) diff --git a/sdk/python/pulumi_dokploy/_utilities.py b/sdk/python/pulumi_dokploy/_utilities.py new file mode 100644 index 0000000..cd045a0 --- /dev/null +++ b/sdk/python/pulumi_dokploy/_utilities.py @@ -0,0 +1,328 @@ +# 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 asyncio +import functools +import importlib.metadata +import importlib.util +import inspect +import json +import os +import sys +import typing +import warnings +import base64 + +import pulumi +import pulumi.runtime +from pulumi.runtime.sync_await import _sync_await +from pulumi.runtime.proto import resource_pb2 + +from semver import VersionInfo as SemverVersion +from parver import Version as PEP440Version + +C = typing.TypeVar("C", bound=typing.Callable) + + +def get_env(*args): + for v in args: + value = os.getenv(v) + if value is not None: + return value + return None + + +def get_env_bool(*args): + str = get_env(*args) + if str is not None: + # NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what + # Terraform uses internally when parsing boolean values. + if str in ["1", "t", "T", "true", "TRUE", "True"]: + return True + if str in ["0", "f", "F", "false", "FALSE", "False"]: + return False + return None + + +def get_env_int(*args): + str = get_env(*args) + if str is not None: + try: + return int(str) + except: + return None + return None + + +def get_env_float(*args): + str = get_env(*args) + if str is not None: + try: + return float(str) + except: + return None + return None + + +def _get_semver_version(): + # __name__ is set to the fully-qualified name of the current module, In our case, it will be + # ._utilities. is the module we want to query the version for. + root_package, *rest = __name__.split('.') + + # Unfortunately, PEP440 and semver differ slightly in incompatible ways. The Pulumi engine expects + # to receive a valid semver string when receiving requests from the language host, so it's our + # responsibility as the library to convert our own PEP440 version into a valid semver string. + + pep440_version_string = importlib.metadata.version(root_package) + pep440_version = PEP440Version.parse(pep440_version_string) + (major, minor, patch) = pep440_version.release + prerelease = None + if pep440_version.pre_tag == 'a': + prerelease = f"alpha.{pep440_version.pre}" + elif pep440_version.pre_tag == 'b': + prerelease = f"beta.{pep440_version.pre}" + elif pep440_version.pre_tag == 'rc': + prerelease = f"rc.{pep440_version.pre}" + elif pep440_version.dev is not None: + # PEP440 has explicit support for dev builds, while semver encodes them as "prerelease" versions. To bridge + # between the two, we convert our dev build version into a prerelease tag. This matches what all of our other + # packages do when constructing their own semver string. + prerelease = f"dev.{pep440_version.dev}" + elif pep440_version.local is not None: + # PEP440 only allows a small set of prerelease tags, so when converting an arbitrary prerelease, + # PypiVersion in /pkg/codegen/python/utilities.go converts it to a local version. Therefore, we need to + # do the reverse conversion here and set the local version as the prerelease tag. + prerelease = pep440_version.local + + return SemverVersion(major=major, minor=minor, patch=patch, prerelease=prerelease) + + +# Determine the version once and cache the value, which measurably improves program performance. +_version = _get_semver_version() +_version_str = str(_version) + +def get_resource_opts_defaults() -> pulumi.ResourceOptions: + return pulumi.ResourceOptions( + version=get_version(), + plugin_download_url=get_plugin_download_url(), + ) + +def get_invoke_opts_defaults() -> pulumi.InvokeOptions: + return pulumi.InvokeOptions( + version=get_version(), + plugin_download_url=get_plugin_download_url(), + ) + +def get_resource_args_opts(resource_args_type, resource_options_type, *args, **kwargs): + """ + Return the resource args and options given the *args and **kwargs of a resource's + __init__ method. + """ + + resource_args, opts = None, None + + # If the first item is the resource args type, save it and remove it from the args list. + if args and isinstance(args[0], resource_args_type): + resource_args, args = args[0], args[1:] + + # Now look at the first item in the args list again. + # If the first item is the resource options class, save it. + if args and isinstance(args[0], resource_options_type): + opts = args[0] + + # If resource_args is None, see if "args" is in kwargs, and, if so, if it's typed as the + # the resource args type. + if resource_args is None: + a = kwargs.get("args") + if isinstance(a, resource_args_type): + resource_args = a + + # If opts is None, look it up in kwargs. + if opts is None: + opts = kwargs.get("opts") + + return resource_args, opts + + +# Temporary: just use pulumi._utils.lazy_import once everyone upgrades. +def lazy_import(fullname): + + import pulumi._utils as u + f = getattr(u, 'lazy_import', None) + if f is None: + f = _lazy_import_temp + + return f(fullname) + + +# Copied from pulumi._utils.lazy_import, see comments there. +def _lazy_import_temp(fullname): + m = sys.modules.get(fullname, None) + if m is not None: + return m + + spec = importlib.util.find_spec(fullname) + + m = sys.modules.get(fullname, None) + if m is not None: + return m + + loader = importlib.util.LazyLoader(spec.loader) + spec.loader = loader + module = importlib.util.module_from_spec(spec) + + m = sys.modules.get(fullname, None) + if m is not None: + return m + + sys.modules[fullname] = module + loader.exec_module(module) + return module + + +class Package(pulumi.runtime.ResourcePackage): + def __init__(self, pkg_info): + super().__init__() + self.pkg_info = pkg_info + + def version(self): + return _version + + def construct_provider(self, name: str, typ: str, urn: str) -> pulumi.ProviderResource: + if typ != self.pkg_info['token']: + raise Exception(f"unknown provider type {typ}") + Provider = getattr(lazy_import(self.pkg_info['fqn']), self.pkg_info['class']) + return Provider(name, pulumi.ResourceOptions(urn=urn)) + + +class Module(pulumi.runtime.ResourceModule): + def __init__(self, mod_info): + super().__init__() + self.mod_info = mod_info + + def version(self): + return _version + + def construct(self, name: str, typ: str, urn: str) -> pulumi.Resource: + class_name = self.mod_info['classes'].get(typ, None) + + if class_name is None: + raise Exception(f"unknown resource type {typ}") + + TheClass = getattr(lazy_import(self.mod_info['fqn']), class_name) + return TheClass(name, pulumi.ResourceOptions(urn=urn)) + + +def register(resource_modules, resource_packages): + resource_modules = json.loads(resource_modules) + resource_packages = json.loads(resource_packages) + + for pkg_info in resource_packages: + pulumi.runtime.register_resource_package(pkg_info['pkg'], Package(pkg_info)) + + for mod_info in resource_modules: + pulumi.runtime.register_resource_module( + mod_info['pkg'], + mod_info['mod'], + Module(mod_info)) + + +_F = typing.TypeVar('_F', bound=typing.Callable[..., typing.Any]) + + +def lift_output_func(func: typing.Any) -> typing.Callable[[_F], _F]: + """Decorator internally used on {fn}_output lifted function versions + to implement them automatically from the un-lifted function.""" + + func_sig = inspect.signature(func) + + def lifted_func(*args, opts=None, **kwargs): + bound_args = func_sig.bind(*args, **kwargs) + # Convert tuple to list, see pulumi/pulumi#8172 + args_list = list(bound_args.args) + return pulumi.Output.from_input({ + 'args': args_list, + 'kwargs': bound_args.kwargs + }).apply(lambda resolved_args: func(*resolved_args['args'], + opts=opts, + **resolved_args['kwargs'])) + + return (lambda _: lifted_func) + + +def call_plain( + tok: str, + props: pulumi.Inputs, + res: typing.Optional[pulumi.Resource] = None, + typ: typing.Optional[type] = None, +) -> typing.Any: + """ + Wraps pulumi.runtime.plain to force the output and return it plainly. + """ + + output = pulumi.runtime.call(tok, props, res, typ) + + # Ingoring deps silently. They are typically non-empty, r.f() calls include r as a dependency. + result, known, secret, _ = _sync_await(asyncio.create_task(_await_output(output))) + + problem = None + if not known: + problem = ' an unknown value' + elif secret: + problem = ' a secret value' + + if problem: + raise AssertionError( + f"Plain resource method '{tok}' incorrectly returned {problem}. " + + "This is an error in the provider, please report this to the provider developer." + ) + + return result + + +async def _await_output(o: pulumi.Output[typing.Any]) -> typing.Tuple[object, bool, bool, set]: + return ( + await o._future, + await o._is_known, + await o._is_secret, + await o._resources, + ) + + +# This is included to provide an upgrade path for users who are using a version +# of the Pulumi SDK (<3.121.0) that does not include the `deprecated` decorator. +def deprecated(message: str) -> typing.Callable[[C], C]: + """ + Decorator to indicate a function is deprecated. + + As well as inserting appropriate statements to indicate that the function is + deprecated, this decorator also tags the function with a special attribute + so that Pulumi code can detect that it is deprecated and react appropriately + in certain situations. + + message is the deprecation message that should be printed if the function is called. + """ + + def decorator(fn: C) -> C: + if not callable(fn): + raise TypeError("Expected fn to be callable") + + @functools.wraps(fn) + def deprecated_fn(*args, **kwargs): + warnings.warn(message) + pulumi.warn(f"{fn.__name__} is deprecated: {message}") + + return fn(*args, **kwargs) + + deprecated_fn.__dict__["_pulumi_deprecated_callable"] = fn + return typing.cast(C, deprecated_fn) + + return decorator + +def get_plugin_download_url(): + return "github://api.github.com/maxvojtkov/pulumi-dokploy" + +def get_version(): + return _version_str diff --git a/sdk/python/pulumi_dokploy/application.py b/sdk/python/pulumi_dokploy/application.py new file mode 100644 index 0000000..942520a --- /dev/null +++ b/sdk/python/pulumi_dokploy/application.py @@ -0,0 +1,4583 @@ +# 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__ = ['ApplicationArgs', 'Application'] + +@pulumi.input_type +class ApplicationArgs: + def __init__(__self__, *, + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_build_path: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + build_args: Optional[pulumi.Input[_builtins.str]] = None, + build_path: Optional[pulumi.Input[_builtins.str]] = None, + build_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + build_server_id: Optional[pulumi.Input[_builtins.str]] = None, + build_type: Optional[pulumi.Input[_builtins.str]] = None, + clean_cache: Optional[pulumi.Input[_builtins.bool]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + create_env_file: Optional[pulumi.Input[_builtins.bool]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_build_path: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_build_stage: Optional[pulumi.Input[_builtins.str]] = None, + docker_context_path: Optional[pulumi.Input[_builtins.str]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + dockerfile: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + heroku_version: Optional[pulumi.Input[_builtins.str]] = None, + is_preview_deployments_active: Optional[pulumi.Input[_builtins.bool]] = None, + is_static_spa: Optional[pulumi.Input[_builtins.bool]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_args: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + preview_certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + preview_custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + preview_env: Optional[pulumi.Input[_builtins.str]] = None, + preview_https: Optional[pulumi.Input[_builtins.bool]] = None, + preview_labels: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preview_limit: Optional[pulumi.Input[_builtins.int]] = None, + preview_path: Optional[pulumi.Input[_builtins.str]] = None, + preview_port: Optional[pulumi.Input[_builtins.int]] = None, + preview_wildcard: Optional[pulumi.Input[_builtins.str]] = None, + publish_directory: Optional[pulumi.Input[_builtins.str]] = None, + railpack_version: Optional[pulumi.Input[_builtins.str]] = None, + registry_id: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_active: Optional[pulumi.Input[_builtins.bool]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + subtitle: Optional[pulumi.Input[_builtins.str]] = None, + title: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + The set of arguments for constructing a Application resource. + + :param pulumi.Input[_builtins.str] environment_id: Environment this application belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to build. + :param pulumi.Input[_builtins.str] bitbucket_build_path: Path within the Bitbucket repository to build from. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to build. + :param pulumi.Input[_builtins.str] build_args: Docker build arguments in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_path: Path within the GitHub repository to build from. + :param pulumi.Input[_builtins.str] build_registry_id: Registry used by a dedicated build server. + :param pulumi.Input[_builtins.str] build_secrets: Docker build secrets in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_server_id: Server that performs builds, when separate from the deploy server. + :param pulumi.Input[_builtins.str] build_type: How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + :param pulumi.Input[_builtins.bool] clean_cache: Discard the build cache on the next deployment. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.bool] create_env_file: Write the environment variables to a `.env` file in the container. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to build for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_build_path: Path within a custom Git repository to build from. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_build_stage: Target stage for a multi-stage Docker build. + :param pulumi.Input[_builtins.str] docker_context_path: Docker build context path. + :param pulumi.Input[_builtins.str] docker_image: Docker image reference, when `source_type` is `docker`. + :param pulumi.Input[_builtins.str] dockerfile: Path to the Dockerfile, when `build_type` is `dockerfile`. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.bool] enabled: Whether the application is enabled. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Runtime environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to build. + :param pulumi.Input[_builtins.str] gitea_build_path: Path within the Gitea repository to build from. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to build. + :param pulumi.Input[_builtins.str] gitlab_build_path: Path within the GitLab repository to build from. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] heroku_version: Heroku buildpack stack version. + :param pulumi.Input[_builtins.bool] is_preview_deployments_active: Build a preview deployment for each pull request. + :param pulumi.Input[_builtins.bool] is_static_spa: Serve a static build as a single-page application. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the application. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.str] password: Registry password, when pulling a private image. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.str] preview_build_args: Build arguments applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_build_secrets: Build secrets applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_certificate_type: Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] preview_custom_cert_resolver: Traefik certificate resolver for preview deployments. + :param pulumi.Input[_builtins.str] preview_env: Environment variables applied to preview deployments. + :param pulumi.Input[_builtins.bool] preview_https: Serve preview deployments over HTTPS. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] preview_labels: Pull request labels that opt into preview deployments. + :param pulumi.Input[_builtins.int] preview_limit: Maximum number of concurrent preview deployments. + :param pulumi.Input[_builtins.str] preview_path: Base path for preview deployments. + :param pulumi.Input[_builtins.int] preview_port: Container port exposed by preview deployments. + :param pulumi.Input[_builtins.str] preview_wildcard: Wildcard domain used to expose preview deployments. + :param pulumi.Input[_builtins.str] publish_directory: Directory served when `build_type` is `static`. + :param pulumi.Input[_builtins.str] railpack_version: Railpack version. + :param pulumi.Input[_builtins.str] registry_id: Registry used to push the built image. + :param pulumi.Input[_builtins.str] registry_url: Registry URL, when pulling a private image. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.bool] rollback_active: Keep previous images so deployments can be rolled back. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_registry_id: Registry used to store rollback images. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] subtitle: Display subtitle shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] title: Display title shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + :param pulumi.Input[_builtins.str] username: Registry username, when pulling a private image. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if args is not None: + pulumi.set(__self__, "args", args) + if auto_deploy is not None: + pulumi.set(__self__, "auto_deploy", auto_deploy) + if bitbucket_branch is not None: + pulumi.set(__self__, "bitbucket_branch", bitbucket_branch) + if bitbucket_build_path is not None: + pulumi.set(__self__, "bitbucket_build_path", bitbucket_build_path) + if bitbucket_id is not None: + pulumi.set(__self__, "bitbucket_id", bitbucket_id) + if bitbucket_owner is not None: + pulumi.set(__self__, "bitbucket_owner", bitbucket_owner) + if bitbucket_repository is not None: + pulumi.set(__self__, "bitbucket_repository", bitbucket_repository) + if bitbucket_repository_slug is not None: + pulumi.set(__self__, "bitbucket_repository_slug", bitbucket_repository_slug) + if branch is not None: + pulumi.set(__self__, "branch", branch) + if build_args is not None: + pulumi.set(__self__, "build_args", build_args) + if build_path is not None: + pulumi.set(__self__, "build_path", build_path) + if build_registry_id is not None: + pulumi.set(__self__, "build_registry_id", build_registry_id) + if build_secrets is not None: + pulumi.set(__self__, "build_secrets", build_secrets) + if build_server_id is not None: + pulumi.set(__self__, "build_server_id", build_server_id) + if build_type is not None: + pulumi.set(__self__, "build_type", build_type) + if clean_cache is not None: + pulumi.set(__self__, "clean_cache", clean_cache) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if create_env_file is not None: + pulumi.set(__self__, "create_env_file", create_env_file) + if custom_git_branch is not None: + pulumi.set(__self__, "custom_git_branch", custom_git_branch) + if custom_git_build_path is not None: + pulumi.set(__self__, "custom_git_build_path", custom_git_build_path) + if custom_git_ssh_key_id is not None: + pulumi.set(__self__, "custom_git_ssh_key_id", custom_git_ssh_key_id) + if custom_git_url is not None: + pulumi.set(__self__, "custom_git_url", custom_git_url) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_build_stage is not None: + pulumi.set(__self__, "docker_build_stage", docker_build_stage) + if docker_context_path is not None: + pulumi.set(__self__, "docker_context_path", docker_context_path) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if dockerfile is not None: + pulumi.set(__self__, "dockerfile", dockerfile) + if enable_submodules is not None: + pulumi.set(__self__, "enable_submodules", enable_submodules) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if gitea_branch is not None: + pulumi.set(__self__, "gitea_branch", gitea_branch) + if gitea_build_path is not None: + pulumi.set(__self__, "gitea_build_path", gitea_build_path) + if gitea_id is not None: + pulumi.set(__self__, "gitea_id", gitea_id) + if gitea_owner is not None: + pulumi.set(__self__, "gitea_owner", gitea_owner) + if gitea_repository is not None: + pulumi.set(__self__, "gitea_repository", gitea_repository) + if github_id is not None: + pulumi.set(__self__, "github_id", github_id) + if gitlab_branch is not None: + pulumi.set(__self__, "gitlab_branch", gitlab_branch) + if gitlab_build_path is not None: + pulumi.set(__self__, "gitlab_build_path", gitlab_build_path) + if gitlab_id is not None: + pulumi.set(__self__, "gitlab_id", gitlab_id) + if gitlab_owner is not None: + pulumi.set(__self__, "gitlab_owner", gitlab_owner) + if gitlab_path_namespace is not None: + pulumi.set(__self__, "gitlab_path_namespace", gitlab_path_namespace) + if gitlab_project_id is not None: + pulumi.set(__self__, "gitlab_project_id", gitlab_project_id) + if gitlab_repository is not None: + pulumi.set(__self__, "gitlab_repository", gitlab_repository) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if heroku_version is not None: + pulumi.set(__self__, "heroku_version", heroku_version) + if is_preview_deployments_active is not None: + pulumi.set(__self__, "is_preview_deployments_active", is_preview_deployments_active) + if is_static_spa is not None: + pulumi.set(__self__, "is_static_spa", is_static_spa) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if owner is not None: + pulumi.set(__self__, "owner", owner) + if password is not None: + pulumi.set(__self__, "password", password) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if preview_build_args is not None: + pulumi.set(__self__, "preview_build_args", preview_build_args) + if preview_build_secrets is not None: + pulumi.set(__self__, "preview_build_secrets", preview_build_secrets) + if preview_certificate_type is not None: + pulumi.set(__self__, "preview_certificate_type", preview_certificate_type) + if preview_custom_cert_resolver is not None: + pulumi.set(__self__, "preview_custom_cert_resolver", preview_custom_cert_resolver) + if preview_env is not None: + pulumi.set(__self__, "preview_env", preview_env) + if preview_https is not None: + pulumi.set(__self__, "preview_https", preview_https) + if preview_labels is not None: + pulumi.set(__self__, "preview_labels", preview_labels) + if preview_limit is not None: + pulumi.set(__self__, "preview_limit", preview_limit) + if preview_path is not None: + pulumi.set(__self__, "preview_path", preview_path) + if preview_port is not None: + pulumi.set(__self__, "preview_port", preview_port) + if preview_wildcard is not None: + pulumi.set(__self__, "preview_wildcard", preview_wildcard) + if publish_directory is not None: + pulumi.set(__self__, "publish_directory", publish_directory) + if railpack_version is not None: + pulumi.set(__self__, "railpack_version", railpack_version) + if registry_id is not None: + pulumi.set(__self__, "registry_id", registry_id) + if registry_url is not None: + pulumi.set(__self__, "registry_url", registry_url) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if repository is not None: + pulumi.set(__self__, "repository", repository) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_active is not None: + pulumi.set(__self__, "rollback_active", rollback_active) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if rollback_registry_id is not None: + pulumi.set(__self__, "rollback_registry_id", rollback_registry_id) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if source_type is not None: + pulumi.set(__self__, "source_type", source_type) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if subtitle is not None: + pulumi.set(__self__, "subtitle", subtitle) + if title is not None: + pulumi.set(__self__, "title", title) + if trigger_type is not None: + pulumi.set(__self__, "trigger_type", trigger_type) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + if username is not None: + pulumi.set(__self__, "username", username) + if watch_paths is not None: + pulumi.set(__self__, "watch_paths", watch_paths) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this application belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter(name="autoDeploy") + def auto_deploy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Deploy automatically when the configured trigger fires. + """ + return pulumi.get(self, "auto_deploy") + + @auto_deploy.setter + def auto_deploy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "auto_deploy", value) + + @_builtins.property + @pulumi.getter(name="bitbucketBranch") + def bitbucket_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket branch to build. + """ + return pulumi.get(self, "bitbucket_branch") + + @bitbucket_branch.setter + def bitbucket_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_branch", value) + + @_builtins.property + @pulumi.getter(name="bitbucketBuildPath") + def bitbucket_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the Bitbucket repository to build from. + """ + return pulumi.get(self, "bitbucket_build_path") + + @bitbucket_build_path.setter + def bitbucket_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_build_path", value) + + @_builtins.property + @pulumi.getter(name="bitbucketId") + def bitbucket_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Bitbucket provider connection. + """ + return pulumi.get(self, "bitbucket_id") + + @bitbucket_id.setter + def bitbucket_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_id", value) + + @_builtins.property + @pulumi.getter(name="bitbucketOwner") + def bitbucket_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository owner. + """ + return pulumi.get(self, "bitbucket_owner") + + @bitbucket_owner.setter + def bitbucket_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_owner", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepository") + def bitbucket_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository name. + """ + return pulumi.get(self, "bitbucket_repository") + + @bitbucket_repository.setter + def bitbucket_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepositorySlug") + def bitbucket_repository_slug(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository slug. + """ + return pulumi.get(self, "bitbucket_repository_slug") + + @bitbucket_repository_slug.setter + def bitbucket_repository_slug(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository_slug", value) + + @_builtins.property + @pulumi.getter + def branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub branch to build. + """ + return pulumi.get(self, "branch") + + @branch.setter + def branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "branch", value) + + @_builtins.property + @pulumi.getter(name="buildArgs") + def build_args(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker build arguments in `KEY=value` format, one per line. + """ + return pulumi.get(self, "build_args") + + @build_args.setter + def build_args(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_args", value) + + @_builtins.property + @pulumi.getter(name="buildPath") + def build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the GitHub repository to build from. + """ + return pulumi.get(self, "build_path") + + @build_path.setter + def build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_path", value) + + @_builtins.property + @pulumi.getter(name="buildRegistryId") + def build_registry_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry used by a dedicated build server. + """ + return pulumi.get(self, "build_registry_id") + + @build_registry_id.setter + def build_registry_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_registry_id", value) + + @_builtins.property + @pulumi.getter(name="buildSecrets") + def build_secrets(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker build secrets in `KEY=value` format, one per line. + """ + return pulumi.get(self, "build_secrets") + + @build_secrets.setter + def build_secrets(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_secrets", value) + + @_builtins.property + @pulumi.getter(name="buildServerId") + def build_server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server that performs builds, when separate from the deploy server. + """ + return pulumi.get(self, "build_server_id") + + @build_server_id.setter + def build_server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_server_id", value) + + @_builtins.property + @pulumi.getter(name="buildType") + def build_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + """ + return pulumi.get(self, "build_type") + + @build_type.setter + def build_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_type", value) + + @_builtins.property + @pulumi.getter(name="cleanCache") + def clean_cache(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Discard the build cache on the next deployment. + """ + return pulumi.get(self, "clean_cache") + + @clean_cache.setter + def clean_cache(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "clean_cache", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createEnvFile") + def create_env_file(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Write the environment variables to a `.env` file in the container. + """ + return pulumi.get(self, "create_env_file") + + @create_env_file.setter + def create_env_file(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "create_env_file", value) + + @_builtins.property + @pulumi.getter(name="customGitBranch") + def custom_git_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Branch to build for a custom Git remote. + """ + return pulumi.get(self, "custom_git_branch") + + @custom_git_branch.setter + def custom_git_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_branch", value) + + @_builtins.property + @pulumi.getter(name="customGitBuildPath") + def custom_git_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within a custom Git repository to build from. + """ + return pulumi.get(self, "custom_git_build_path") + + @custom_git_build_path.setter + def custom_git_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_build_path", value) + + @_builtins.property + @pulumi.getter(name="customGitSshKeyId") + def custom_git_ssh_key_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + SSH key used to clone a private custom Git remote. + """ + return pulumi.get(self, "custom_git_ssh_key_id") + + @custom_git_ssh_key_id.setter + def custom_git_ssh_key_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_ssh_key_id", value) + + @_builtins.property + @pulumi.getter(name="customGitUrl") + def custom_git_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Git remote URL, when `source_type` is `git`. + """ + return pulumi.get(self, "custom_git_url") + + @custom_git_url.setter + def custom_git_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_url", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerBuildStage") + def docker_build_stage(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Target stage for a multi-stage Docker build. + """ + return pulumi.get(self, "docker_build_stage") + + @docker_build_stage.setter + def docker_build_stage(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_build_stage", value) + + @_builtins.property + @pulumi.getter(name="dockerContextPath") + def docker_context_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker build context path. + """ + return pulumi.get(self, "docker_context_path") + + @docker_context_path.setter + def docker_context_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_context_path", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker image reference, when `source_type` is `docker`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter + def dockerfile(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to the Dockerfile, when `build_type` is `dockerfile`. + """ + return pulumi.get(self, "dockerfile") + + @dockerfile.setter + def dockerfile(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "dockerfile", value) + + @_builtins.property + @pulumi.getter(name="enableSubmodules") + def enable_submodules(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Clone Git submodules when checking out the repository. + """ + return pulumi.get(self, "enable_submodules") + + @enable_submodules.setter + def enable_submodules(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enable_submodules", value) + + @_builtins.property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the application is enabled. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enabled", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Runtime environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="giteaBranch") + def gitea_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea branch to build. + """ + return pulumi.get(self, "gitea_branch") + + @gitea_branch.setter + def gitea_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_branch", value) + + @_builtins.property + @pulumi.getter(name="giteaBuildPath") + def gitea_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the Gitea repository to build from. + """ + return pulumi.get(self, "gitea_build_path") + + @gitea_build_path.setter + def gitea_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_build_path", value) + + @_builtins.property + @pulumi.getter(name="giteaId") + def gitea_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Gitea provider connection. + """ + return pulumi.get(self, "gitea_id") + + @gitea_id.setter + def gitea_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_id", value) + + @_builtins.property + @pulumi.getter(name="giteaOwner") + def gitea_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository owner. + """ + return pulumi.get(self, "gitea_owner") + + @gitea_owner.setter + def gitea_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_owner", value) + + @_builtins.property + @pulumi.getter(name="giteaRepository") + def gitea_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository name. + """ + return pulumi.get(self, "gitea_repository") + + @gitea_repository.setter + def gitea_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_repository", value) + + @_builtins.property + @pulumi.getter(name="githubId") + def github_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitHub provider connection. + """ + return pulumi.get(self, "github_id") + + @github_id.setter + def github_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "github_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabBranch") + def gitlab_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab branch to build. + """ + return pulumi.get(self, "gitlab_branch") + + @gitlab_branch.setter + def gitlab_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_branch", value) + + @_builtins.property + @pulumi.getter(name="gitlabBuildPath") + def gitlab_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the GitLab repository to build from. + """ + return pulumi.get(self, "gitlab_build_path") + + @gitlab_build_path.setter + def gitlab_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_build_path", value) + + @_builtins.property + @pulumi.getter(name="gitlabId") + def gitlab_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitLab provider connection. + """ + return pulumi.get(self, "gitlab_id") + + @gitlab_id.setter + def gitlab_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabOwner") + def gitlab_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository owner. + """ + return pulumi.get(self, "gitlab_owner") + + @gitlab_owner.setter + def gitlab_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_owner", value) + + @_builtins.property + @pulumi.getter(name="gitlabPathNamespace") + def gitlab_path_namespace(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Full GitLab namespace path. + """ + return pulumi.get(self, "gitlab_path_namespace") + + @gitlab_path_namespace.setter + def gitlab_path_namespace(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_path_namespace", value) + + @_builtins.property + @pulumi.getter(name="gitlabProjectId") + def gitlab_project_id(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Numeric GitLab project ID. + """ + return pulumi.get(self, "gitlab_project_id") + + @gitlab_project_id.setter + def gitlab_project_id(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "gitlab_project_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabRepository") + def gitlab_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository name. + """ + return pulumi.get(self, "gitlab_repository") + + @gitlab_repository.setter + def gitlab_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_repository", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="herokuVersion") + def heroku_version(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Heroku buildpack stack version. + """ + return pulumi.get(self, "heroku_version") + + @heroku_version.setter + def heroku_version(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "heroku_version", value) + + @_builtins.property + @pulumi.getter(name="isPreviewDeploymentsActive") + def is_preview_deployments_active(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Build a preview deployment for each pull request. + """ + return pulumi.get(self, "is_preview_deployments_active") + + @is_preview_deployments_active.setter + def is_preview_deployments_active(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "is_preview_deployments_active", value) + + @_builtins.property + @pulumi.getter(name="isStaticSpa") + def is_static_spa(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Serve a static build as a single-page application. + """ + return pulumi.get(self, "is_static_spa") + + @is_static_spa.setter + def is_static_spa(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "is_static_spa", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the application. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter + def owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository owner. + """ + return pulumi.get(self, "owner") + + @owner.setter + def owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "owner", value) + + @_builtins.property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry password, when pulling a private image. + """ + 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="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter(name="previewBuildArgs") + def preview_build_args(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Build arguments applied to preview deployments. + """ + return pulumi.get(self, "preview_build_args") + + @preview_build_args.setter + def preview_build_args(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_build_args", value) + + @_builtins.property + @pulumi.getter(name="previewBuildSecrets") + def preview_build_secrets(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Build secrets applied to preview deployments. + """ + return pulumi.get(self, "preview_build_secrets") + + @preview_build_secrets.setter + def preview_build_secrets(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_build_secrets", value) + + @_builtins.property + @pulumi.getter(name="previewCertificateType") + def preview_certificate_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + """ + return pulumi.get(self, "preview_certificate_type") + + @preview_certificate_type.setter + def preview_certificate_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_certificate_type", value) + + @_builtins.property + @pulumi.getter(name="previewCustomCertResolver") + def preview_custom_cert_resolver(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Traefik certificate resolver for preview deployments. + """ + return pulumi.get(self, "preview_custom_cert_resolver") + + @preview_custom_cert_resolver.setter + def preview_custom_cert_resolver(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_custom_cert_resolver", value) + + @_builtins.property + @pulumi.getter(name="previewEnv") + def preview_env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables applied to preview deployments. + """ + return pulumi.get(self, "preview_env") + + @preview_env.setter + def preview_env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_env", value) + + @_builtins.property + @pulumi.getter(name="previewHttps") + def preview_https(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Serve preview deployments over HTTPS. + """ + return pulumi.get(self, "preview_https") + + @preview_https.setter + def preview_https(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "preview_https", value) + + @_builtins.property + @pulumi.getter(name="previewLabels") + def preview_labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Pull request labels that opt into preview deployments. + """ + return pulumi.get(self, "preview_labels") + + @preview_labels.setter + def preview_labels(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "preview_labels", value) + + @_builtins.property + @pulumi.getter(name="previewLimit") + def preview_limit(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Maximum number of concurrent preview deployments. + """ + return pulumi.get(self, "preview_limit") + + @preview_limit.setter + def preview_limit(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "preview_limit", value) + + @_builtins.property + @pulumi.getter(name="previewPath") + def preview_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Base path for preview deployments. + """ + return pulumi.get(self, "preview_path") + + @preview_path.setter + def preview_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_path", value) + + @_builtins.property + @pulumi.getter(name="previewPort") + def preview_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Container port exposed by preview deployments. + """ + return pulumi.get(self, "preview_port") + + @preview_port.setter + def preview_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "preview_port", value) + + @_builtins.property + @pulumi.getter(name="previewWildcard") + def preview_wildcard(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Wildcard domain used to expose preview deployments. + """ + return pulumi.get(self, "preview_wildcard") + + @preview_wildcard.setter + def preview_wildcard(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_wildcard", value) + + @_builtins.property + @pulumi.getter(name="publishDirectory") + def publish_directory(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Directory served when `build_type` is `static`. + """ + return pulumi.get(self, "publish_directory") + + @publish_directory.setter + def publish_directory(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "publish_directory", value) + + @_builtins.property + @pulumi.getter(name="railpackVersion") + def railpack_version(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Railpack version. + """ + return pulumi.get(self, "railpack_version") + + @railpack_version.setter + def railpack_version(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "railpack_version", value) + + @_builtins.property + @pulumi.getter(name="registryId") + def registry_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry used to push the built image. + """ + return pulumi.get(self, "registry_id") + + @registry_id.setter + def registry_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_id", value) + + @_builtins.property + @pulumi.getter(name="registryUrl") + def registry_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry URL, when pulling a private image. + """ + return pulumi.get(self, "registry_url") + + @registry_url.setter + def registry_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_url", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter + def repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository name. + """ + return pulumi.get(self, "repository") + + @repository.setter + def repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "repository", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackActive") + def rollback_active(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Keep previous images so deployments can be rolled back. + """ + return pulumi.get(self, "rollback_active") + + @rollback_active.setter + def rollback_active(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "rollback_active", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackRegistryId") + def rollback_registry_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry used to store rollback images. + """ + return pulumi.get(self, "rollback_registry_id") + + @rollback_registry_id.setter + def rollback_registry_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_registry_id", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + """ + return pulumi.get(self, "source_type") + + @source_type.setter + def source_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "source_type", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter + def subtitle(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display subtitle shown in the Dokploy UI. + """ + return pulumi.get(self, "subtitle") + + @subtitle.setter + def subtitle(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "subtitle", value) + + @_builtins.property + @pulumi.getter + def title(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display title shown in the Dokploy UI. + """ + return pulumi.get(self, "title") + + @title.setter + def title(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "title", value) + + @_builtins.property + @pulumi.getter(name="triggerType") + def trigger_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + """ + return pulumi.get(self, "trigger_type") + + @trigger_type.setter + def trigger_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "trigger_type", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + @_builtins.property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry username, when pulling a private image. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "username", value) + + @_builtins.property + @pulumi.getter(name="watchPaths") + def watch_paths(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Glob patterns that limit which changed paths trigger an automatic deployment. + """ + return pulumi.get(self, "watch_paths") + + @watch_paths.setter + def watch_paths(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "watch_paths", value) + + +@pulumi.input_type +class _ApplicationState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_build_path: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + build_args: Optional[pulumi.Input[_builtins.str]] = None, + build_path: Optional[pulumi.Input[_builtins.str]] = None, + build_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + build_server_id: Optional[pulumi.Input[_builtins.str]] = None, + build_type: Optional[pulumi.Input[_builtins.str]] = None, + clean_cache: Optional[pulumi.Input[_builtins.bool]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + create_env_file: Optional[pulumi.Input[_builtins.bool]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_build_path: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_build_stage: Optional[pulumi.Input[_builtins.str]] = None, + docker_context_path: Optional[pulumi.Input[_builtins.str]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + dockerfile: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + heroku_version: Optional[pulumi.Input[_builtins.str]] = None, + is_preview_deployments_active: Optional[pulumi.Input[_builtins.bool]] = None, + is_static_spa: Optional[pulumi.Input[_builtins.bool]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_args: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + preview_certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + preview_custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + preview_env: Optional[pulumi.Input[_builtins.str]] = None, + preview_https: Optional[pulumi.Input[_builtins.bool]] = None, + preview_labels: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preview_limit: Optional[pulumi.Input[_builtins.int]] = None, + preview_path: Optional[pulumi.Input[_builtins.str]] = None, + preview_port: Optional[pulumi.Input[_builtins.int]] = None, + preview_wildcard: Optional[pulumi.Input[_builtins.str]] = None, + publish_directory: Optional[pulumi.Input[_builtins.str]] = None, + railpack_version: Optional[pulumi.Input[_builtins.str]] = None, + registry_id: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_active: Optional[pulumi.Input[_builtins.bool]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + subtitle: Optional[pulumi.Input[_builtins.str]] = None, + title: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + Input properties used for looking up and filtering Application resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to build. + :param pulumi.Input[_builtins.str] bitbucket_build_path: Path within the Bitbucket repository to build from. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to build. + :param pulumi.Input[_builtins.str] build_args: Docker build arguments in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_path: Path within the GitHub repository to build from. + :param pulumi.Input[_builtins.str] build_registry_id: Registry used by a dedicated build server. + :param pulumi.Input[_builtins.str] build_secrets: Docker build secrets in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_server_id: Server that performs builds, when separate from the deploy server. + :param pulumi.Input[_builtins.str] build_type: How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + :param pulumi.Input[_builtins.bool] clean_cache: Discard the build cache on the next deployment. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.bool] create_env_file: Write the environment variables to a `.env` file in the container. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the application was created. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to build for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_build_path: Path within a custom Git repository to build from. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_build_stage: Target stage for a multi-stage Docker build. + :param pulumi.Input[_builtins.str] docker_context_path: Docker build context path. + :param pulumi.Input[_builtins.str] docker_image: Docker image reference, when `source_type` is `docker`. + :param pulumi.Input[_builtins.str] dockerfile: Path to the Dockerfile, when `build_type` is `dockerfile`. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.bool] enabled: Whether the application is enabled. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Runtime environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this application belongs to. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to build. + :param pulumi.Input[_builtins.str] gitea_build_path: Path within the Gitea repository to build from. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to build. + :param pulumi.Input[_builtins.str] gitlab_build_path: Path within the GitLab repository to build from. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] heroku_version: Heroku buildpack stack version. + :param pulumi.Input[_builtins.bool] is_preview_deployments_active: Build a preview deployment for each pull request. + :param pulumi.Input[_builtins.bool] is_static_spa: Serve a static build as a single-page application. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the application. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.str] password: Registry password, when pulling a private image. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.str] preview_build_args: Build arguments applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_build_secrets: Build secrets applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_certificate_type: Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] preview_custom_cert_resolver: Traefik certificate resolver for preview deployments. + :param pulumi.Input[_builtins.str] preview_env: Environment variables applied to preview deployments. + :param pulumi.Input[_builtins.bool] preview_https: Serve preview deployments over HTTPS. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] preview_labels: Pull request labels that opt into preview deployments. + :param pulumi.Input[_builtins.int] preview_limit: Maximum number of concurrent preview deployments. + :param pulumi.Input[_builtins.str] preview_path: Base path for preview deployments. + :param pulumi.Input[_builtins.int] preview_port: Container port exposed by preview deployments. + :param pulumi.Input[_builtins.str] preview_wildcard: Wildcard domain used to expose preview deployments. + :param pulumi.Input[_builtins.str] publish_directory: Directory served when `build_type` is `static`. + :param pulumi.Input[_builtins.str] railpack_version: Railpack version. + :param pulumi.Input[_builtins.str] registry_id: Registry used to push the built image. + :param pulumi.Input[_builtins.str] registry_url: Registry URL, when pulling a private image. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.bool] rollback_active: Keep previous images so deployments can be rolled back. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_registry_id: Registry used to store rollback images. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] subtitle: Display subtitle shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] title: Display title shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + :param pulumi.Input[_builtins.str] username: Registry username, when pulling a private image. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if application_status is not None: + pulumi.set(__self__, "application_status", application_status) + if args is not None: + pulumi.set(__self__, "args", args) + if auto_deploy is not None: + pulumi.set(__self__, "auto_deploy", auto_deploy) + if bitbucket_branch is not None: + pulumi.set(__self__, "bitbucket_branch", bitbucket_branch) + if bitbucket_build_path is not None: + pulumi.set(__self__, "bitbucket_build_path", bitbucket_build_path) + if bitbucket_id is not None: + pulumi.set(__self__, "bitbucket_id", bitbucket_id) + if bitbucket_owner is not None: + pulumi.set(__self__, "bitbucket_owner", bitbucket_owner) + if bitbucket_repository is not None: + pulumi.set(__self__, "bitbucket_repository", bitbucket_repository) + if bitbucket_repository_slug is not None: + pulumi.set(__self__, "bitbucket_repository_slug", bitbucket_repository_slug) + if branch is not None: + pulumi.set(__self__, "branch", branch) + if build_args is not None: + pulumi.set(__self__, "build_args", build_args) + if build_path is not None: + pulumi.set(__self__, "build_path", build_path) + if build_registry_id is not None: + pulumi.set(__self__, "build_registry_id", build_registry_id) + if build_secrets is not None: + pulumi.set(__self__, "build_secrets", build_secrets) + if build_server_id is not None: + pulumi.set(__self__, "build_server_id", build_server_id) + if build_type is not None: + pulumi.set(__self__, "build_type", build_type) + if clean_cache is not None: + pulumi.set(__self__, "clean_cache", clean_cache) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if create_env_file is not None: + pulumi.set(__self__, "create_env_file", create_env_file) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if custom_git_branch is not None: + pulumi.set(__self__, "custom_git_branch", custom_git_branch) + if custom_git_build_path is not None: + pulumi.set(__self__, "custom_git_build_path", custom_git_build_path) + if custom_git_ssh_key_id is not None: + pulumi.set(__self__, "custom_git_ssh_key_id", custom_git_ssh_key_id) + if custom_git_url is not None: + pulumi.set(__self__, "custom_git_url", custom_git_url) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_build_stage is not None: + pulumi.set(__self__, "docker_build_stage", docker_build_stage) + if docker_context_path is not None: + pulumi.set(__self__, "docker_context_path", docker_context_path) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if dockerfile is not None: + pulumi.set(__self__, "dockerfile", dockerfile) + if enable_submodules is not None: + pulumi.set(__self__, "enable_submodules", enable_submodules) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if gitea_branch is not None: + pulumi.set(__self__, "gitea_branch", gitea_branch) + if gitea_build_path is not None: + pulumi.set(__self__, "gitea_build_path", gitea_build_path) + if gitea_id is not None: + pulumi.set(__self__, "gitea_id", gitea_id) + if gitea_owner is not None: + pulumi.set(__self__, "gitea_owner", gitea_owner) + if gitea_repository is not None: + pulumi.set(__self__, "gitea_repository", gitea_repository) + if github_id is not None: + pulumi.set(__self__, "github_id", github_id) + if gitlab_branch is not None: + pulumi.set(__self__, "gitlab_branch", gitlab_branch) + if gitlab_build_path is not None: + pulumi.set(__self__, "gitlab_build_path", gitlab_build_path) + if gitlab_id is not None: + pulumi.set(__self__, "gitlab_id", gitlab_id) + if gitlab_owner is not None: + pulumi.set(__self__, "gitlab_owner", gitlab_owner) + if gitlab_path_namespace is not None: + pulumi.set(__self__, "gitlab_path_namespace", gitlab_path_namespace) + if gitlab_project_id is not None: + pulumi.set(__self__, "gitlab_project_id", gitlab_project_id) + if gitlab_repository is not None: + pulumi.set(__self__, "gitlab_repository", gitlab_repository) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if heroku_version is not None: + pulumi.set(__self__, "heroku_version", heroku_version) + if is_preview_deployments_active is not None: + pulumi.set(__self__, "is_preview_deployments_active", is_preview_deployments_active) + if is_static_spa is not None: + pulumi.set(__self__, "is_static_spa", is_static_spa) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if owner is not None: + pulumi.set(__self__, "owner", owner) + if password is not None: + pulumi.set(__self__, "password", password) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if preview_build_args is not None: + pulumi.set(__self__, "preview_build_args", preview_build_args) + if preview_build_secrets is not None: + pulumi.set(__self__, "preview_build_secrets", preview_build_secrets) + if preview_certificate_type is not None: + pulumi.set(__self__, "preview_certificate_type", preview_certificate_type) + if preview_custom_cert_resolver is not None: + pulumi.set(__self__, "preview_custom_cert_resolver", preview_custom_cert_resolver) + if preview_env is not None: + pulumi.set(__self__, "preview_env", preview_env) + if preview_https is not None: + pulumi.set(__self__, "preview_https", preview_https) + if preview_labels is not None: + pulumi.set(__self__, "preview_labels", preview_labels) + if preview_limit is not None: + pulumi.set(__self__, "preview_limit", preview_limit) + if preview_path is not None: + pulumi.set(__self__, "preview_path", preview_path) + if preview_port is not None: + pulumi.set(__self__, "preview_port", preview_port) + if preview_wildcard is not None: + pulumi.set(__self__, "preview_wildcard", preview_wildcard) + if publish_directory is not None: + pulumi.set(__self__, "publish_directory", publish_directory) + if railpack_version is not None: + pulumi.set(__self__, "railpack_version", railpack_version) + if registry_id is not None: + pulumi.set(__self__, "registry_id", registry_id) + if registry_url is not None: + pulumi.set(__self__, "registry_url", registry_url) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if repository is not None: + pulumi.set(__self__, "repository", repository) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_active is not None: + pulumi.set(__self__, "rollback_active", rollback_active) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if rollback_registry_id is not None: + pulumi.set(__self__, "rollback_registry_id", rollback_registry_id) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if source_type is not None: + pulumi.set(__self__, "source_type", source_type) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if subtitle is not None: + pulumi.set(__self__, "subtitle", subtitle) + if title is not None: + pulumi.set(__self__, "title", title) + if trigger_type is not None: + pulumi.set(__self__, "trigger_type", trigger_type) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + if username is not None: + pulumi.set(__self__, "username", username) + if watch_paths is not None: + pulumi.set(__self__, "watch_paths", watch_paths) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @application_status.setter + def application_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_status", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter(name="autoDeploy") + def auto_deploy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Deploy automatically when the configured trigger fires. + """ + return pulumi.get(self, "auto_deploy") + + @auto_deploy.setter + def auto_deploy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "auto_deploy", value) + + @_builtins.property + @pulumi.getter(name="bitbucketBranch") + def bitbucket_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket branch to build. + """ + return pulumi.get(self, "bitbucket_branch") + + @bitbucket_branch.setter + def bitbucket_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_branch", value) + + @_builtins.property + @pulumi.getter(name="bitbucketBuildPath") + def bitbucket_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the Bitbucket repository to build from. + """ + return pulumi.get(self, "bitbucket_build_path") + + @bitbucket_build_path.setter + def bitbucket_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_build_path", value) + + @_builtins.property + @pulumi.getter(name="bitbucketId") + def bitbucket_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Bitbucket provider connection. + """ + return pulumi.get(self, "bitbucket_id") + + @bitbucket_id.setter + def bitbucket_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_id", value) + + @_builtins.property + @pulumi.getter(name="bitbucketOwner") + def bitbucket_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository owner. + """ + return pulumi.get(self, "bitbucket_owner") + + @bitbucket_owner.setter + def bitbucket_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_owner", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepository") + def bitbucket_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository name. + """ + return pulumi.get(self, "bitbucket_repository") + + @bitbucket_repository.setter + def bitbucket_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepositorySlug") + def bitbucket_repository_slug(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository slug. + """ + return pulumi.get(self, "bitbucket_repository_slug") + + @bitbucket_repository_slug.setter + def bitbucket_repository_slug(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository_slug", value) + + @_builtins.property + @pulumi.getter + def branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub branch to build. + """ + return pulumi.get(self, "branch") + + @branch.setter + def branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "branch", value) + + @_builtins.property + @pulumi.getter(name="buildArgs") + def build_args(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker build arguments in `KEY=value` format, one per line. + """ + return pulumi.get(self, "build_args") + + @build_args.setter + def build_args(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_args", value) + + @_builtins.property + @pulumi.getter(name="buildPath") + def build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the GitHub repository to build from. + """ + return pulumi.get(self, "build_path") + + @build_path.setter + def build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_path", value) + + @_builtins.property + @pulumi.getter(name="buildRegistryId") + def build_registry_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry used by a dedicated build server. + """ + return pulumi.get(self, "build_registry_id") + + @build_registry_id.setter + def build_registry_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_registry_id", value) + + @_builtins.property + @pulumi.getter(name="buildSecrets") + def build_secrets(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker build secrets in `KEY=value` format, one per line. + """ + return pulumi.get(self, "build_secrets") + + @build_secrets.setter + def build_secrets(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_secrets", value) + + @_builtins.property + @pulumi.getter(name="buildServerId") + def build_server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server that performs builds, when separate from the deploy server. + """ + return pulumi.get(self, "build_server_id") + + @build_server_id.setter + def build_server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_server_id", value) + + @_builtins.property + @pulumi.getter(name="buildType") + def build_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + """ + return pulumi.get(self, "build_type") + + @build_type.setter + def build_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "build_type", value) + + @_builtins.property + @pulumi.getter(name="cleanCache") + def clean_cache(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Discard the build cache on the next deployment. + """ + return pulumi.get(self, "clean_cache") + + @clean_cache.setter + def clean_cache(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "clean_cache", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createEnvFile") + def create_env_file(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Write the environment variables to a `.env` file in the container. + """ + return pulumi.get(self, "create_env_file") + + @create_env_file.setter + def create_env_file(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "create_env_file", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the application was created. + """ + 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(name="customGitBranch") + def custom_git_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Branch to build for a custom Git remote. + """ + return pulumi.get(self, "custom_git_branch") + + @custom_git_branch.setter + def custom_git_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_branch", value) + + @_builtins.property + @pulumi.getter(name="customGitBuildPath") + def custom_git_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within a custom Git repository to build from. + """ + return pulumi.get(self, "custom_git_build_path") + + @custom_git_build_path.setter + def custom_git_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_build_path", value) + + @_builtins.property + @pulumi.getter(name="customGitSshKeyId") + def custom_git_ssh_key_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + SSH key used to clone a private custom Git remote. + """ + return pulumi.get(self, "custom_git_ssh_key_id") + + @custom_git_ssh_key_id.setter + def custom_git_ssh_key_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_ssh_key_id", value) + + @_builtins.property + @pulumi.getter(name="customGitUrl") + def custom_git_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Git remote URL, when `source_type` is `git`. + """ + return pulumi.get(self, "custom_git_url") + + @custom_git_url.setter + def custom_git_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_url", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerBuildStage") + def docker_build_stage(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Target stage for a multi-stage Docker build. + """ + return pulumi.get(self, "docker_build_stage") + + @docker_build_stage.setter + def docker_build_stage(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_build_stage", value) + + @_builtins.property + @pulumi.getter(name="dockerContextPath") + def docker_context_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker build context path. + """ + return pulumi.get(self, "docker_context_path") + + @docker_context_path.setter + def docker_context_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_context_path", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker image reference, when `source_type` is `docker`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter + def dockerfile(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to the Dockerfile, when `build_type` is `dockerfile`. + """ + return pulumi.get(self, "dockerfile") + + @dockerfile.setter + def dockerfile(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "dockerfile", value) + + @_builtins.property + @pulumi.getter(name="enableSubmodules") + def enable_submodules(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Clone Git submodules when checking out the repository. + """ + return pulumi.get(self, "enable_submodules") + + @enable_submodules.setter + def enable_submodules(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enable_submodules", value) + + @_builtins.property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the application is enabled. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enabled", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Runtime environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this application belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="giteaBranch") + def gitea_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea branch to build. + """ + return pulumi.get(self, "gitea_branch") + + @gitea_branch.setter + def gitea_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_branch", value) + + @_builtins.property + @pulumi.getter(name="giteaBuildPath") + def gitea_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the Gitea repository to build from. + """ + return pulumi.get(self, "gitea_build_path") + + @gitea_build_path.setter + def gitea_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_build_path", value) + + @_builtins.property + @pulumi.getter(name="giteaId") + def gitea_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Gitea provider connection. + """ + return pulumi.get(self, "gitea_id") + + @gitea_id.setter + def gitea_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_id", value) + + @_builtins.property + @pulumi.getter(name="giteaOwner") + def gitea_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository owner. + """ + return pulumi.get(self, "gitea_owner") + + @gitea_owner.setter + def gitea_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_owner", value) + + @_builtins.property + @pulumi.getter(name="giteaRepository") + def gitea_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository name. + """ + return pulumi.get(self, "gitea_repository") + + @gitea_repository.setter + def gitea_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_repository", value) + + @_builtins.property + @pulumi.getter(name="githubId") + def github_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitHub provider connection. + """ + return pulumi.get(self, "github_id") + + @github_id.setter + def github_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "github_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabBranch") + def gitlab_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab branch to build. + """ + return pulumi.get(self, "gitlab_branch") + + @gitlab_branch.setter + def gitlab_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_branch", value) + + @_builtins.property + @pulumi.getter(name="gitlabBuildPath") + def gitlab_build_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path within the GitLab repository to build from. + """ + return pulumi.get(self, "gitlab_build_path") + + @gitlab_build_path.setter + def gitlab_build_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_build_path", value) + + @_builtins.property + @pulumi.getter(name="gitlabId") + def gitlab_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitLab provider connection. + """ + return pulumi.get(self, "gitlab_id") + + @gitlab_id.setter + def gitlab_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabOwner") + def gitlab_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository owner. + """ + return pulumi.get(self, "gitlab_owner") + + @gitlab_owner.setter + def gitlab_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_owner", value) + + @_builtins.property + @pulumi.getter(name="gitlabPathNamespace") + def gitlab_path_namespace(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Full GitLab namespace path. + """ + return pulumi.get(self, "gitlab_path_namespace") + + @gitlab_path_namespace.setter + def gitlab_path_namespace(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_path_namespace", value) + + @_builtins.property + @pulumi.getter(name="gitlabProjectId") + def gitlab_project_id(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Numeric GitLab project ID. + """ + return pulumi.get(self, "gitlab_project_id") + + @gitlab_project_id.setter + def gitlab_project_id(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "gitlab_project_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabRepository") + def gitlab_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository name. + """ + return pulumi.get(self, "gitlab_repository") + + @gitlab_repository.setter + def gitlab_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_repository", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="herokuVersion") + def heroku_version(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Heroku buildpack stack version. + """ + return pulumi.get(self, "heroku_version") + + @heroku_version.setter + def heroku_version(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "heroku_version", value) + + @_builtins.property + @pulumi.getter(name="isPreviewDeploymentsActive") + def is_preview_deployments_active(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Build a preview deployment for each pull request. + """ + return pulumi.get(self, "is_preview_deployments_active") + + @is_preview_deployments_active.setter + def is_preview_deployments_active(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "is_preview_deployments_active", value) + + @_builtins.property + @pulumi.getter(name="isStaticSpa") + def is_static_spa(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Serve a static build as a single-page application. + """ + return pulumi.get(self, "is_static_spa") + + @is_static_spa.setter + def is_static_spa(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "is_static_spa", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the application. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter + def owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository owner. + """ + return pulumi.get(self, "owner") + + @owner.setter + def owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "owner", value) + + @_builtins.property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry password, when pulling a private image. + """ + 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="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter(name="previewBuildArgs") + def preview_build_args(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Build arguments applied to preview deployments. + """ + return pulumi.get(self, "preview_build_args") + + @preview_build_args.setter + def preview_build_args(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_build_args", value) + + @_builtins.property + @pulumi.getter(name="previewBuildSecrets") + def preview_build_secrets(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Build secrets applied to preview deployments. + """ + return pulumi.get(self, "preview_build_secrets") + + @preview_build_secrets.setter + def preview_build_secrets(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_build_secrets", value) + + @_builtins.property + @pulumi.getter(name="previewCertificateType") + def preview_certificate_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + """ + return pulumi.get(self, "preview_certificate_type") + + @preview_certificate_type.setter + def preview_certificate_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_certificate_type", value) + + @_builtins.property + @pulumi.getter(name="previewCustomCertResolver") + def preview_custom_cert_resolver(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Traefik certificate resolver for preview deployments. + """ + return pulumi.get(self, "preview_custom_cert_resolver") + + @preview_custom_cert_resolver.setter + def preview_custom_cert_resolver(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_custom_cert_resolver", value) + + @_builtins.property + @pulumi.getter(name="previewEnv") + def preview_env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables applied to preview deployments. + """ + return pulumi.get(self, "preview_env") + + @preview_env.setter + def preview_env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_env", value) + + @_builtins.property + @pulumi.getter(name="previewHttps") + def preview_https(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Serve preview deployments over HTTPS. + """ + return pulumi.get(self, "preview_https") + + @preview_https.setter + def preview_https(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "preview_https", value) + + @_builtins.property + @pulumi.getter(name="previewLabels") + def preview_labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Pull request labels that opt into preview deployments. + """ + return pulumi.get(self, "preview_labels") + + @preview_labels.setter + def preview_labels(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "preview_labels", value) + + @_builtins.property + @pulumi.getter(name="previewLimit") + def preview_limit(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Maximum number of concurrent preview deployments. + """ + return pulumi.get(self, "preview_limit") + + @preview_limit.setter + def preview_limit(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "preview_limit", value) + + @_builtins.property + @pulumi.getter(name="previewPath") + def preview_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Base path for preview deployments. + """ + return pulumi.get(self, "preview_path") + + @preview_path.setter + def preview_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_path", value) + + @_builtins.property + @pulumi.getter(name="previewPort") + def preview_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Container port exposed by preview deployments. + """ + return pulumi.get(self, "preview_port") + + @preview_port.setter + def preview_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "preview_port", value) + + @_builtins.property + @pulumi.getter(name="previewWildcard") + def preview_wildcard(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Wildcard domain used to expose preview deployments. + """ + return pulumi.get(self, "preview_wildcard") + + @preview_wildcard.setter + def preview_wildcard(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_wildcard", value) + + @_builtins.property + @pulumi.getter(name="publishDirectory") + def publish_directory(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Directory served when `build_type` is `static`. + """ + return pulumi.get(self, "publish_directory") + + @publish_directory.setter + def publish_directory(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "publish_directory", value) + + @_builtins.property + @pulumi.getter(name="railpackVersion") + def railpack_version(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Railpack version. + """ + return pulumi.get(self, "railpack_version") + + @railpack_version.setter + def railpack_version(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "railpack_version", value) + + @_builtins.property + @pulumi.getter(name="registryId") + def registry_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry used to push the built image. + """ + return pulumi.get(self, "registry_id") + + @registry_id.setter + def registry_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_id", value) + + @_builtins.property + @pulumi.getter(name="registryUrl") + def registry_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry URL, when pulling a private image. + """ + return pulumi.get(self, "registry_url") + + @registry_url.setter + def registry_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_url", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter + def repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository name. + """ + return pulumi.get(self, "repository") + + @repository.setter + def repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "repository", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackActive") + def rollback_active(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Keep previous images so deployments can be rolled back. + """ + return pulumi.get(self, "rollback_active") + + @rollback_active.setter + def rollback_active(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "rollback_active", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackRegistryId") + def rollback_registry_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry used to store rollback images. + """ + return pulumi.get(self, "rollback_registry_id") + + @rollback_registry_id.setter + def rollback_registry_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_registry_id", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + """ + return pulumi.get(self, "source_type") + + @source_type.setter + def source_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "source_type", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter + def subtitle(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display subtitle shown in the Dokploy UI. + """ + return pulumi.get(self, "subtitle") + + @subtitle.setter + def subtitle(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "subtitle", value) + + @_builtins.property + @pulumi.getter + def title(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display title shown in the Dokploy UI. + """ + return pulumi.get(self, "title") + + @title.setter + def title(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "title", value) + + @_builtins.property + @pulumi.getter(name="triggerType") + def trigger_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + """ + return pulumi.get(self, "trigger_type") + + @trigger_type.setter + def trigger_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "trigger_type", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + @_builtins.property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry username, when pulling a private image. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "username", value) + + @_builtins.property + @pulumi.getter(name="watchPaths") + def watch_paths(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Glob patterns that limit which changed paths trigger an automatic deployment. + """ + return pulumi.get(self, "watch_paths") + + @watch_paths.setter + def watch_paths(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "watch_paths", value) + + +@pulumi.type_token("dokploy:index/application:Application") +class Application(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_build_path: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + build_args: Optional[pulumi.Input[_builtins.str]] = None, + build_path: Optional[pulumi.Input[_builtins.str]] = None, + build_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + build_server_id: Optional[pulumi.Input[_builtins.str]] = None, + build_type: Optional[pulumi.Input[_builtins.str]] = None, + clean_cache: Optional[pulumi.Input[_builtins.bool]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + create_env_file: Optional[pulumi.Input[_builtins.bool]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_build_path: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_build_stage: Optional[pulumi.Input[_builtins.str]] = None, + docker_context_path: Optional[pulumi.Input[_builtins.str]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + dockerfile: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + heroku_version: Optional[pulumi.Input[_builtins.str]] = None, + is_preview_deployments_active: Optional[pulumi.Input[_builtins.bool]] = None, + is_static_spa: Optional[pulumi.Input[_builtins.bool]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_args: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + preview_certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + preview_custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + preview_env: Optional[pulumi.Input[_builtins.str]] = None, + preview_https: Optional[pulumi.Input[_builtins.bool]] = None, + preview_labels: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preview_limit: Optional[pulumi.Input[_builtins.int]] = None, + preview_path: Optional[pulumi.Input[_builtins.str]] = None, + preview_port: Optional[pulumi.Input[_builtins.int]] = None, + preview_wildcard: Optional[pulumi.Input[_builtins.str]] = None, + publish_directory: Optional[pulumi.Input[_builtins.str]] = None, + railpack_version: Optional[pulumi.Input[_builtins.str]] = None, + registry_id: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_active: Optional[pulumi.Input[_builtins.bool]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + subtitle: Optional[pulumi.Input[_builtins.str]] = None, + title: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + __props__=None): + """ + Create a Application resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to build. + :param pulumi.Input[_builtins.str] bitbucket_build_path: Path within the Bitbucket repository to build from. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to build. + :param pulumi.Input[_builtins.str] build_args: Docker build arguments in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_path: Path within the GitHub repository to build from. + :param pulumi.Input[_builtins.str] build_registry_id: Registry used by a dedicated build server. + :param pulumi.Input[_builtins.str] build_secrets: Docker build secrets in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_server_id: Server that performs builds, when separate from the deploy server. + :param pulumi.Input[_builtins.str] build_type: How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + :param pulumi.Input[_builtins.bool] clean_cache: Discard the build cache on the next deployment. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.bool] create_env_file: Write the environment variables to a `.env` file in the container. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to build for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_build_path: Path within a custom Git repository to build from. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_build_stage: Target stage for a multi-stage Docker build. + :param pulumi.Input[_builtins.str] docker_context_path: Docker build context path. + :param pulumi.Input[_builtins.str] docker_image: Docker image reference, when `source_type` is `docker`. + :param pulumi.Input[_builtins.str] dockerfile: Path to the Dockerfile, when `build_type` is `dockerfile`. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.bool] enabled: Whether the application is enabled. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Runtime environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this application belongs to. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to build. + :param pulumi.Input[_builtins.str] gitea_build_path: Path within the Gitea repository to build from. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to build. + :param pulumi.Input[_builtins.str] gitlab_build_path: Path within the GitLab repository to build from. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] heroku_version: Heroku buildpack stack version. + :param pulumi.Input[_builtins.bool] is_preview_deployments_active: Build a preview deployment for each pull request. + :param pulumi.Input[_builtins.bool] is_static_spa: Serve a static build as a single-page application. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the application. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.str] password: Registry password, when pulling a private image. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.str] preview_build_args: Build arguments applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_build_secrets: Build secrets applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_certificate_type: Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] preview_custom_cert_resolver: Traefik certificate resolver for preview deployments. + :param pulumi.Input[_builtins.str] preview_env: Environment variables applied to preview deployments. + :param pulumi.Input[_builtins.bool] preview_https: Serve preview deployments over HTTPS. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] preview_labels: Pull request labels that opt into preview deployments. + :param pulumi.Input[_builtins.int] preview_limit: Maximum number of concurrent preview deployments. + :param pulumi.Input[_builtins.str] preview_path: Base path for preview deployments. + :param pulumi.Input[_builtins.int] preview_port: Container port exposed by preview deployments. + :param pulumi.Input[_builtins.str] preview_wildcard: Wildcard domain used to expose preview deployments. + :param pulumi.Input[_builtins.str] publish_directory: Directory served when `build_type` is `static`. + :param pulumi.Input[_builtins.str] railpack_version: Railpack version. + :param pulumi.Input[_builtins.str] registry_id: Registry used to push the built image. + :param pulumi.Input[_builtins.str] registry_url: Registry URL, when pulling a private image. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.bool] rollback_active: Keep previous images so deployments can be rolled back. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_registry_id: Registry used to store rollback images. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] subtitle: Display subtitle shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] title: Display title shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + :param pulumi.Input[_builtins.str] username: Registry username, when pulling a private image. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ApplicationArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Application resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param ApplicationArgs 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(ApplicationArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_build_path: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + build_args: Optional[pulumi.Input[_builtins.str]] = None, + build_path: Optional[pulumi.Input[_builtins.str]] = None, + build_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + build_server_id: Optional[pulumi.Input[_builtins.str]] = None, + build_type: Optional[pulumi.Input[_builtins.str]] = None, + clean_cache: Optional[pulumi.Input[_builtins.bool]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + create_env_file: Optional[pulumi.Input[_builtins.bool]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_build_path: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_build_stage: Optional[pulumi.Input[_builtins.str]] = None, + docker_context_path: Optional[pulumi.Input[_builtins.str]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + dockerfile: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + heroku_version: Optional[pulumi.Input[_builtins.str]] = None, + is_preview_deployments_active: Optional[pulumi.Input[_builtins.bool]] = None, + is_static_spa: Optional[pulumi.Input[_builtins.bool]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_args: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + preview_certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + preview_custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + preview_env: Optional[pulumi.Input[_builtins.str]] = None, + preview_https: Optional[pulumi.Input[_builtins.bool]] = None, + preview_labels: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preview_limit: Optional[pulumi.Input[_builtins.int]] = None, + preview_path: Optional[pulumi.Input[_builtins.str]] = None, + preview_port: Optional[pulumi.Input[_builtins.int]] = None, + preview_wildcard: Optional[pulumi.Input[_builtins.str]] = None, + publish_directory: Optional[pulumi.Input[_builtins.str]] = None, + railpack_version: Optional[pulumi.Input[_builtins.str]] = None, + registry_id: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_active: Optional[pulumi.Input[_builtins.bool]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + subtitle: Optional[pulumi.Input[_builtins.str]] = None, + title: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_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__ = ApplicationArgs.__new__(ApplicationArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["args"] = args + __props__.__dict__["auto_deploy"] = auto_deploy + __props__.__dict__["bitbucket_branch"] = bitbucket_branch + __props__.__dict__["bitbucket_build_path"] = bitbucket_build_path + __props__.__dict__["bitbucket_id"] = bitbucket_id + __props__.__dict__["bitbucket_owner"] = bitbucket_owner + __props__.__dict__["bitbucket_repository"] = bitbucket_repository + __props__.__dict__["bitbucket_repository_slug"] = bitbucket_repository_slug + __props__.__dict__["branch"] = branch + __props__.__dict__["build_args"] = build_args + __props__.__dict__["build_path"] = build_path + __props__.__dict__["build_registry_id"] = build_registry_id + __props__.__dict__["build_secrets"] = None if build_secrets is None else pulumi.Output.secret(build_secrets) + __props__.__dict__["build_server_id"] = build_server_id + __props__.__dict__["build_type"] = build_type + __props__.__dict__["clean_cache"] = clean_cache + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["create_env_file"] = create_env_file + __props__.__dict__["custom_git_branch"] = custom_git_branch + __props__.__dict__["custom_git_build_path"] = custom_git_build_path + __props__.__dict__["custom_git_ssh_key_id"] = custom_git_ssh_key_id + __props__.__dict__["custom_git_url"] = custom_git_url + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_build_stage"] = docker_build_stage + __props__.__dict__["docker_context_path"] = docker_context_path + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["dockerfile"] = dockerfile + __props__.__dict__["enable_submodules"] = enable_submodules + __props__.__dict__["enabled"] = enabled + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["gitea_branch"] = gitea_branch + __props__.__dict__["gitea_build_path"] = gitea_build_path + __props__.__dict__["gitea_id"] = gitea_id + __props__.__dict__["gitea_owner"] = gitea_owner + __props__.__dict__["gitea_repository"] = gitea_repository + __props__.__dict__["github_id"] = github_id + __props__.__dict__["gitlab_branch"] = gitlab_branch + __props__.__dict__["gitlab_build_path"] = gitlab_build_path + __props__.__dict__["gitlab_id"] = gitlab_id + __props__.__dict__["gitlab_owner"] = gitlab_owner + __props__.__dict__["gitlab_path_namespace"] = gitlab_path_namespace + __props__.__dict__["gitlab_project_id"] = gitlab_project_id + __props__.__dict__["gitlab_repository"] = gitlab_repository + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["heroku_version"] = heroku_version + __props__.__dict__["is_preview_deployments_active"] = is_preview_deployments_active + __props__.__dict__["is_static_spa"] = is_static_spa + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["owner"] = owner + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["preview_build_args"] = preview_build_args + __props__.__dict__["preview_build_secrets"] = None if preview_build_secrets is None else pulumi.Output.secret(preview_build_secrets) + __props__.__dict__["preview_certificate_type"] = preview_certificate_type + __props__.__dict__["preview_custom_cert_resolver"] = preview_custom_cert_resolver + __props__.__dict__["preview_env"] = preview_env + __props__.__dict__["preview_https"] = preview_https + __props__.__dict__["preview_labels"] = preview_labels + __props__.__dict__["preview_limit"] = preview_limit + __props__.__dict__["preview_path"] = preview_path + __props__.__dict__["preview_port"] = preview_port + __props__.__dict__["preview_wildcard"] = preview_wildcard + __props__.__dict__["publish_directory"] = publish_directory + __props__.__dict__["railpack_version"] = railpack_version + __props__.__dict__["registry_id"] = registry_id + __props__.__dict__["registry_url"] = registry_url + __props__.__dict__["replicas"] = replicas + __props__.__dict__["repository"] = repository + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_active"] = rollback_active + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["rollback_registry_id"] = rollback_registry_id + __props__.__dict__["server_id"] = server_id + __props__.__dict__["source_type"] = source_type + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["subtitle"] = subtitle + __props__.__dict__["title"] = title + __props__.__dict__["trigger_type"] = trigger_type + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["username"] = username + __props__.__dict__["watch_paths"] = watch_paths + __props__.__dict__["application_status"] = None + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["buildSecrets", "password", "previewBuildSecrets"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Application, __self__).__init__( + 'dokploy:index/application:Application', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_build_path: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + build_args: Optional[pulumi.Input[_builtins.str]] = None, + build_path: Optional[pulumi.Input[_builtins.str]] = None, + build_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + build_server_id: Optional[pulumi.Input[_builtins.str]] = None, + build_type: Optional[pulumi.Input[_builtins.str]] = None, + clean_cache: Optional[pulumi.Input[_builtins.bool]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + create_env_file: Optional[pulumi.Input[_builtins.bool]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_build_path: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_build_stage: Optional[pulumi.Input[_builtins.str]] = None, + docker_context_path: Optional[pulumi.Input[_builtins.str]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + dockerfile: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_build_path: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + heroku_version: Optional[pulumi.Input[_builtins.str]] = None, + is_preview_deployments_active: Optional[pulumi.Input[_builtins.bool]] = None, + is_static_spa: Optional[pulumi.Input[_builtins.bool]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_args: Optional[pulumi.Input[_builtins.str]] = None, + preview_build_secrets: Optional[pulumi.Input[_builtins.str]] = None, + preview_certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + preview_custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + preview_env: Optional[pulumi.Input[_builtins.str]] = None, + preview_https: Optional[pulumi.Input[_builtins.bool]] = None, + preview_labels: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preview_limit: Optional[pulumi.Input[_builtins.int]] = None, + preview_path: Optional[pulumi.Input[_builtins.str]] = None, + preview_port: Optional[pulumi.Input[_builtins.int]] = None, + preview_wildcard: Optional[pulumi.Input[_builtins.str]] = None, + publish_directory: Optional[pulumi.Input[_builtins.str]] = None, + railpack_version: Optional[pulumi.Input[_builtins.str]] = None, + registry_id: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_active: Optional[pulumi.Input[_builtins.bool]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_registry_id: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + subtitle: Optional[pulumi.Input[_builtins.str]] = None, + title: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None) -> 'Application': + """ + Get an existing Application 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] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to build. + :param pulumi.Input[_builtins.str] bitbucket_build_path: Path within the Bitbucket repository to build from. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to build. + :param pulumi.Input[_builtins.str] build_args: Docker build arguments in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_path: Path within the GitHub repository to build from. + :param pulumi.Input[_builtins.str] build_registry_id: Registry used by a dedicated build server. + :param pulumi.Input[_builtins.str] build_secrets: Docker build secrets in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] build_server_id: Server that performs builds, when separate from the deploy server. + :param pulumi.Input[_builtins.str] build_type: How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + :param pulumi.Input[_builtins.bool] clean_cache: Discard the build cache on the next deployment. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.bool] create_env_file: Write the environment variables to a `.env` file in the container. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the application was created. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to build for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_build_path: Path within a custom Git repository to build from. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_build_stage: Target stage for a multi-stage Docker build. + :param pulumi.Input[_builtins.str] docker_context_path: Docker build context path. + :param pulumi.Input[_builtins.str] docker_image: Docker image reference, when `source_type` is `docker`. + :param pulumi.Input[_builtins.str] dockerfile: Path to the Dockerfile, when `build_type` is `dockerfile`. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.bool] enabled: Whether the application is enabled. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Runtime environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this application belongs to. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to build. + :param pulumi.Input[_builtins.str] gitea_build_path: Path within the Gitea repository to build from. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to build. + :param pulumi.Input[_builtins.str] gitlab_build_path: Path within the GitLab repository to build from. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] heroku_version: Heroku buildpack stack version. + :param pulumi.Input[_builtins.bool] is_preview_deployments_active: Build a preview deployment for each pull request. + :param pulumi.Input[_builtins.bool] is_static_spa: Serve a static build as a single-page application. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the application. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.str] password: Registry password, when pulling a private image. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.str] preview_build_args: Build arguments applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_build_secrets: Build secrets applied to preview deployments. + :param pulumi.Input[_builtins.str] preview_certificate_type: Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] preview_custom_cert_resolver: Traefik certificate resolver for preview deployments. + :param pulumi.Input[_builtins.str] preview_env: Environment variables applied to preview deployments. + :param pulumi.Input[_builtins.bool] preview_https: Serve preview deployments over HTTPS. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] preview_labels: Pull request labels that opt into preview deployments. + :param pulumi.Input[_builtins.int] preview_limit: Maximum number of concurrent preview deployments. + :param pulumi.Input[_builtins.str] preview_path: Base path for preview deployments. + :param pulumi.Input[_builtins.int] preview_port: Container port exposed by preview deployments. + :param pulumi.Input[_builtins.str] preview_wildcard: Wildcard domain used to expose preview deployments. + :param pulumi.Input[_builtins.str] publish_directory: Directory served when `build_type` is `static`. + :param pulumi.Input[_builtins.str] railpack_version: Railpack version. + :param pulumi.Input[_builtins.str] registry_id: Registry used to push the built image. + :param pulumi.Input[_builtins.str] registry_url: Registry URL, when pulling a private image. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.bool] rollback_active: Keep previous images so deployments can be rolled back. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_registry_id: Registry used to store rollback images. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] subtitle: Display subtitle shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] title: Display title shown in the Dokploy UI. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + :param pulumi.Input[_builtins.str] username: Registry username, when pulling a private image. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ApplicationState.__new__(_ApplicationState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["application_status"] = application_status + __props__.__dict__["args"] = args + __props__.__dict__["auto_deploy"] = auto_deploy + __props__.__dict__["bitbucket_branch"] = bitbucket_branch + __props__.__dict__["bitbucket_build_path"] = bitbucket_build_path + __props__.__dict__["bitbucket_id"] = bitbucket_id + __props__.__dict__["bitbucket_owner"] = bitbucket_owner + __props__.__dict__["bitbucket_repository"] = bitbucket_repository + __props__.__dict__["bitbucket_repository_slug"] = bitbucket_repository_slug + __props__.__dict__["branch"] = branch + __props__.__dict__["build_args"] = build_args + __props__.__dict__["build_path"] = build_path + __props__.__dict__["build_registry_id"] = build_registry_id + __props__.__dict__["build_secrets"] = build_secrets + __props__.__dict__["build_server_id"] = build_server_id + __props__.__dict__["build_type"] = build_type + __props__.__dict__["clean_cache"] = clean_cache + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["create_env_file"] = create_env_file + __props__.__dict__["created_at"] = created_at + __props__.__dict__["custom_git_branch"] = custom_git_branch + __props__.__dict__["custom_git_build_path"] = custom_git_build_path + __props__.__dict__["custom_git_ssh_key_id"] = custom_git_ssh_key_id + __props__.__dict__["custom_git_url"] = custom_git_url + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_build_stage"] = docker_build_stage + __props__.__dict__["docker_context_path"] = docker_context_path + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["dockerfile"] = dockerfile + __props__.__dict__["enable_submodules"] = enable_submodules + __props__.__dict__["enabled"] = enabled + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["gitea_branch"] = gitea_branch + __props__.__dict__["gitea_build_path"] = gitea_build_path + __props__.__dict__["gitea_id"] = gitea_id + __props__.__dict__["gitea_owner"] = gitea_owner + __props__.__dict__["gitea_repository"] = gitea_repository + __props__.__dict__["github_id"] = github_id + __props__.__dict__["gitlab_branch"] = gitlab_branch + __props__.__dict__["gitlab_build_path"] = gitlab_build_path + __props__.__dict__["gitlab_id"] = gitlab_id + __props__.__dict__["gitlab_owner"] = gitlab_owner + __props__.__dict__["gitlab_path_namespace"] = gitlab_path_namespace + __props__.__dict__["gitlab_project_id"] = gitlab_project_id + __props__.__dict__["gitlab_repository"] = gitlab_repository + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["heroku_version"] = heroku_version + __props__.__dict__["is_preview_deployments_active"] = is_preview_deployments_active + __props__.__dict__["is_static_spa"] = is_static_spa + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["owner"] = owner + __props__.__dict__["password"] = password + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["preview_build_args"] = preview_build_args + __props__.__dict__["preview_build_secrets"] = preview_build_secrets + __props__.__dict__["preview_certificate_type"] = preview_certificate_type + __props__.__dict__["preview_custom_cert_resolver"] = preview_custom_cert_resolver + __props__.__dict__["preview_env"] = preview_env + __props__.__dict__["preview_https"] = preview_https + __props__.__dict__["preview_labels"] = preview_labels + __props__.__dict__["preview_limit"] = preview_limit + __props__.__dict__["preview_path"] = preview_path + __props__.__dict__["preview_port"] = preview_port + __props__.__dict__["preview_wildcard"] = preview_wildcard + __props__.__dict__["publish_directory"] = publish_directory + __props__.__dict__["railpack_version"] = railpack_version + __props__.__dict__["registry_id"] = registry_id + __props__.__dict__["registry_url"] = registry_url + __props__.__dict__["replicas"] = replicas + __props__.__dict__["repository"] = repository + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_active"] = rollback_active + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["rollback_registry_id"] = rollback_registry_id + __props__.__dict__["server_id"] = server_id + __props__.__dict__["source_type"] = source_type + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["subtitle"] = subtitle + __props__.__dict__["title"] = title + __props__.__dict__["trigger_type"] = trigger_type + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["username"] = username + __props__.__dict__["watch_paths"] = watch_paths + return Application(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new application. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter + def args(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @_builtins.property + @pulumi.getter(name="autoDeploy") + def auto_deploy(self) -> pulumi.Output[_builtins.bool]: + """ + Deploy automatically when the configured trigger fires. + """ + return pulumi.get(self, "auto_deploy") + + @_builtins.property + @pulumi.getter(name="bitbucketBranch") + def bitbucket_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket branch to build. + """ + return pulumi.get(self, "bitbucket_branch") + + @_builtins.property + @pulumi.getter(name="bitbucketBuildPath") + def bitbucket_build_path(self) -> pulumi.Output[_builtins.str]: + """ + Path within the Bitbucket repository to build from. + """ + return pulumi.get(self, "bitbucket_build_path") + + @_builtins.property + @pulumi.getter(name="bitbucketId") + def bitbucket_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured Bitbucket provider connection. + """ + return pulumi.get(self, "bitbucket_id") + + @_builtins.property + @pulumi.getter(name="bitbucketOwner") + def bitbucket_owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket repository owner. + """ + return pulumi.get(self, "bitbucket_owner") + + @_builtins.property + @pulumi.getter(name="bitbucketRepository") + def bitbucket_repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket repository name. + """ + return pulumi.get(self, "bitbucket_repository") + + @_builtins.property + @pulumi.getter(name="bitbucketRepositorySlug") + def bitbucket_repository_slug(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket repository slug. + """ + return pulumi.get(self, "bitbucket_repository_slug") + + @_builtins.property + @pulumi.getter + def branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitHub branch to build. + """ + return pulumi.get(self, "branch") + + @_builtins.property + @pulumi.getter(name="buildArgs") + def build_args(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker build arguments in `KEY=value` format, one per line. + """ + return pulumi.get(self, "build_args") + + @_builtins.property + @pulumi.getter(name="buildPath") + def build_path(self) -> pulumi.Output[_builtins.str]: + """ + Path within the GitHub repository to build from. + """ + return pulumi.get(self, "build_path") + + @_builtins.property + @pulumi.getter(name="buildRegistryId") + def build_registry_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Registry used by a dedicated build server. + """ + return pulumi.get(self, "build_registry_id") + + @_builtins.property + @pulumi.getter(name="buildSecrets") + def build_secrets(self) -> pulumi.Output[_builtins.str]: + """ + Docker build secrets in `KEY=value` format, one per line. + """ + return pulumi.get(self, "build_secrets") + + @_builtins.property + @pulumi.getter(name="buildServerId") + def build_server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Server that performs builds, when separate from the deploy server. + """ + return pulumi.get(self, "build_server_id") + + @_builtins.property + @pulumi.getter(name="buildType") + def build_type(self) -> pulumi.Output[_builtins.str]: + """ + How the application is built. Valid values: `dockerfile`, `heroku_buildpacks`, `paketo_buildpacks`, `nixpacks`, `static`, `railpack`. + """ + return pulumi.get(self, "build_type") + + @_builtins.property + @pulumi.getter(name="cleanCache") + def clean_cache(self) -> pulumi.Output[_builtins.bool]: + """ + Discard the build cache on the next deployment. + """ + return pulumi.get(self, "clean_cache") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @_builtins.property + @pulumi.getter(name="createEnvFile") + def create_env_file(self) -> pulumi.Output[_builtins.bool]: + """ + Write the environment variables to a `.env` file in the container. + """ + return pulumi.get(self, "create_env_file") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the application was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="customGitBranch") + def custom_git_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Branch to build for a custom Git remote. + """ + return pulumi.get(self, "custom_git_branch") + + @_builtins.property + @pulumi.getter(name="customGitBuildPath") + def custom_git_build_path(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Path within a custom Git repository to build from. + """ + return pulumi.get(self, "custom_git_build_path") + + @_builtins.property + @pulumi.getter(name="customGitSshKeyId") + def custom_git_ssh_key_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + SSH key used to clone a private custom Git remote. + """ + return pulumi.get(self, "custom_git_ssh_key_id") + + @_builtins.property + @pulumi.getter(name="customGitUrl") + def custom_git_url(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Git remote URL, when `source_type` is `git`. + """ + return pulumi.get(self, "custom_git_url") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> pulumi.Output[_builtins.bool]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @_builtins.property + @pulumi.getter(name="dockerBuildStage") + def docker_build_stage(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Target stage for a multi-stage Docker build. + """ + return pulumi.get(self, "docker_build_stage") + + @_builtins.property + @pulumi.getter(name="dockerContextPath") + def docker_context_path(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker build context path. + """ + return pulumi.get(self, "docker_context_path") + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker image reference, when `source_type` is `docker`. + """ + return pulumi.get(self, "docker_image") + + @_builtins.property + @pulumi.getter + def dockerfile(self) -> pulumi.Output[_builtins.str]: + """ + Path to the Dockerfile, when `build_type` is `dockerfile`. + """ + return pulumi.get(self, "dockerfile") + + @_builtins.property + @pulumi.getter(name="enableSubmodules") + def enable_submodules(self) -> pulumi.Output[_builtins.bool]: + """ + Clone Git submodules when checking out the repository. + """ + return pulumi.get(self, "enable_submodules") + + @_builtins.property + @pulumi.getter + def enabled(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the application is enabled. + """ + return pulumi.get(self, "enabled") + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Runtime environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this application belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="giteaBranch") + def gitea_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Gitea branch to build. + """ + return pulumi.get(self, "gitea_branch") + + @_builtins.property + @pulumi.getter(name="giteaBuildPath") + def gitea_build_path(self) -> pulumi.Output[_builtins.str]: + """ + Path within the Gitea repository to build from. + """ + return pulumi.get(self, "gitea_build_path") + + @_builtins.property + @pulumi.getter(name="giteaId") + def gitea_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured Gitea provider connection. + """ + return pulumi.get(self, "gitea_id") + + @_builtins.property + @pulumi.getter(name="giteaOwner") + def gitea_owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Gitea repository owner. + """ + return pulumi.get(self, "gitea_owner") + + @_builtins.property + @pulumi.getter(name="giteaRepository") + def gitea_repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Gitea repository name. + """ + return pulumi.get(self, "gitea_repository") + + @_builtins.property + @pulumi.getter(name="githubId") + def github_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured GitHub provider connection. + """ + return pulumi.get(self, "github_id") + + @_builtins.property + @pulumi.getter(name="gitlabBranch") + def gitlab_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitLab branch to build. + """ + return pulumi.get(self, "gitlab_branch") + + @_builtins.property + @pulumi.getter(name="gitlabBuildPath") + def gitlab_build_path(self) -> pulumi.Output[_builtins.str]: + """ + Path within the GitLab repository to build from. + """ + return pulumi.get(self, "gitlab_build_path") + + @_builtins.property + @pulumi.getter(name="gitlabId") + def gitlab_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured GitLab provider connection. + """ + return pulumi.get(self, "gitlab_id") + + @_builtins.property + @pulumi.getter(name="gitlabOwner") + def gitlab_owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitLab repository owner. + """ + return pulumi.get(self, "gitlab_owner") + + @_builtins.property + @pulumi.getter(name="gitlabPathNamespace") + def gitlab_path_namespace(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Full GitLab namespace path. + """ + return pulumi.get(self, "gitlab_path_namespace") + + @_builtins.property + @pulumi.getter(name="gitlabProjectId") + def gitlab_project_id(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Numeric GitLab project ID. + """ + return pulumi.get(self, "gitlab_project_id") + + @_builtins.property + @pulumi.getter(name="gitlabRepository") + def gitlab_repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitLab repository name. + """ + return pulumi.get(self, "gitlab_repository") + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @_builtins.property + @pulumi.getter(name="herokuVersion") + def heroku_version(self) -> pulumi.Output[_builtins.str]: + """ + Heroku buildpack stack version. + """ + return pulumi.get(self, "heroku_version") + + @_builtins.property + @pulumi.getter(name="isPreviewDeploymentsActive") + def is_preview_deployments_active(self) -> pulumi.Output[_builtins.bool]: + """ + Build a preview deployment for each pull request. + """ + return pulumi.get(self, "is_preview_deployments_active") + + @_builtins.property + @pulumi.getter(name="isStaticSpa") + def is_static_spa(self) -> pulumi.Output[_builtins.bool]: + """ + Serve a static build as a single-page application. + """ + return pulumi.get(self, "is_static_spa") + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the application. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="networkIds") + def network_ids(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @_builtins.property + @pulumi.getter + def owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitHub repository owner. + """ + return pulumi.get(self, "owner") + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Output[_builtins.str]: + """ + Registry password, when pulling a private image. + """ + return pulumi.get(self, "password") + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @_builtins.property + @pulumi.getter(name="previewBuildArgs") + def preview_build_args(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Build arguments applied to preview deployments. + """ + return pulumi.get(self, "preview_build_args") + + @_builtins.property + @pulumi.getter(name="previewBuildSecrets") + def preview_build_secrets(self) -> pulumi.Output[_builtins.str]: + """ + Build secrets applied to preview deployments. + """ + return pulumi.get(self, "preview_build_secrets") + + @_builtins.property + @pulumi.getter(name="previewCertificateType") + def preview_certificate_type(self) -> pulumi.Output[_builtins.str]: + """ + Certificate strategy for preview deployments. Valid values: `letsencrypt`, `none`, `custom`. + """ + return pulumi.get(self, "preview_certificate_type") + + @_builtins.property + @pulumi.getter(name="previewCustomCertResolver") + def preview_custom_cert_resolver(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Traefik certificate resolver for preview deployments. + """ + return pulumi.get(self, "preview_custom_cert_resolver") + + @_builtins.property + @pulumi.getter(name="previewEnv") + def preview_env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables applied to preview deployments. + """ + return pulumi.get(self, "preview_env") + + @_builtins.property + @pulumi.getter(name="previewHttps") + def preview_https(self) -> pulumi.Output[_builtins.bool]: + """ + Serve preview deployments over HTTPS. + """ + return pulumi.get(self, "preview_https") + + @_builtins.property + @pulumi.getter(name="previewLabels") + def preview_labels(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Pull request labels that opt into preview deployments. + """ + return pulumi.get(self, "preview_labels") + + @_builtins.property + @pulumi.getter(name="previewLimit") + def preview_limit(self) -> pulumi.Output[_builtins.int]: + """ + Maximum number of concurrent preview deployments. + """ + return pulumi.get(self, "preview_limit") + + @_builtins.property + @pulumi.getter(name="previewPath") + def preview_path(self) -> pulumi.Output[_builtins.str]: + """ + Base path for preview deployments. + """ + return pulumi.get(self, "preview_path") + + @_builtins.property + @pulumi.getter(name="previewPort") + def preview_port(self) -> pulumi.Output[_builtins.int]: + """ + Container port exposed by preview deployments. + """ + return pulumi.get(self, "preview_port") + + @_builtins.property + @pulumi.getter(name="previewWildcard") + def preview_wildcard(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Wildcard domain used to expose preview deployments. + """ + return pulumi.get(self, "preview_wildcard") + + @_builtins.property + @pulumi.getter(name="publishDirectory") + def publish_directory(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Directory served when `build_type` is `static`. + """ + return pulumi.get(self, "publish_directory") + + @_builtins.property + @pulumi.getter(name="railpackVersion") + def railpack_version(self) -> pulumi.Output[_builtins.str]: + """ + Railpack version. + """ + return pulumi.get(self, "railpack_version") + + @_builtins.property + @pulumi.getter(name="registryId") + def registry_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Registry used to push the built image. + """ + return pulumi.get(self, "registry_id") + + @_builtins.property + @pulumi.getter(name="registryUrl") + def registry_url(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Registry URL, when pulling a private image. + """ + return pulumi.get(self, "registry_url") + + @_builtins.property + @pulumi.getter + def replicas(self) -> pulumi.Output[_builtins.int]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @_builtins.property + @pulumi.getter + def repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitHub repository name. + """ + return pulumi.get(self, "repository") + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackActive") + def rollback_active(self) -> pulumi.Output[_builtins.bool]: + """ + Keep previous images so deployments can be rolled back. + """ + return pulumi.get(self, "rollback_active") + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackRegistryId") + def rollback_registry_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Registry used to store rollback images. + """ + return pulumi.get(self, "rollback_registry_id") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> pulumi.Output[_builtins.str]: + """ + Where the application's code or image comes from. Valid values: `docker`, `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `drop`. + """ + return pulumi.get(self, "source_type") + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @_builtins.property + @pulumi.getter + def subtitle(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Display subtitle shown in the Dokploy UI. + """ + return pulumi.get(self, "subtitle") + + @_builtins.property + @pulumi.getter + def title(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Display title shown in the Dokploy UI. + """ + return pulumi.get(self, "title") + + @_builtins.property + @pulumi.getter(name="triggerType") + def trigger_type(self) -> pulumi.Output[_builtins.str]: + """ + What triggers an automatic GitHub deployment. Valid values: `push`, `tag`. + """ + return pulumi.get(self, "trigger_type") + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Registry username, when pulling a private image. + """ + return pulumi.get(self, "username") + + @_builtins.property + @pulumi.getter(name="watchPaths") + def watch_paths(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Glob patterns that limit which changed paths trigger an automatic deployment. + """ + return pulumi.get(self, "watch_paths") + diff --git a/sdk/python/pulumi_dokploy/certificate.py b/sdk/python/pulumi_dokploy/certificate.py new file mode 100644 index 0000000..44ef3f3 --- /dev/null +++ b/sdk/python/pulumi_dokploy/certificate.py @@ -0,0 +1,373 @@ +# 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__ = ['CertificateArgs', 'Certificate'] + +@pulumi.input_type +class CertificateArgs: + def __init__(__self__, *, + certificate_data: pulumi.Input[_builtins.str], + private_key: pulumi.Input[_builtins.str], + auto_renew: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Certificate resource. + + :param pulumi.Input[_builtins.str] certificate_data: PEM-encoded certificate chain. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.bool] auto_renew: Whether Dokploy should renew this certificate automatically. + :param pulumi.Input[_builtins.str] name: Display name of the certificate. + :param pulumi.Input[_builtins.str] server_id: Server this certificate is installed on. + """ + pulumi.set(__self__, "certificate_data", certificate_data) + pulumi.set(__self__, "private_key", private_key) + if auto_renew is not None: + pulumi.set(__self__, "auto_renew", auto_renew) + if name is not None: + pulumi.set(__self__, "name", name) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + + @_builtins.property + @pulumi.getter(name="certificateData") + def certificate_data(self) -> pulumi.Input[_builtins.str]: + """ + PEM-encoded certificate chain. + """ + return pulumi.get(self, "certificate_data") + + @certificate_data.setter + def certificate_data(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "certificate_data", value) + + @_builtins.property + @pulumi.getter(name="privateKey") + def private_key(self) -> pulumi.Input[_builtins.str]: + """ + PEM-encoded private key. + """ + return pulumi.get(self, "private_key") + + @private_key.setter + def private_key(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "private_key", value) + + @_builtins.property + @pulumi.getter(name="autoRenew") + def auto_renew(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether Dokploy should renew this certificate automatically. + """ + return pulumi.get(self, "auto_renew") + + @auto_renew.setter + def auto_renew(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "auto_renew", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the certificate. + """ + 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="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server this certificate is installed on. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + +@pulumi.input_type +class _CertificateState: + def __init__(__self__, *, + auto_renew: Optional[pulumi.Input[_builtins.bool]] = None, + certificate_data: Optional[pulumi.Input[_builtins.str]] = None, + certificate_path: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Certificate resources. + + :param pulumi.Input[_builtins.bool] auto_renew: Whether Dokploy should renew this certificate automatically. + :param pulumi.Input[_builtins.str] certificate_data: PEM-encoded certificate chain. + :param pulumi.Input[_builtins.str] certificate_path: Path where Dokploy writes the certificate on disk. + :param pulumi.Input[_builtins.str] name: Display name of the certificate. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] server_id: Server this certificate is installed on. + """ + if auto_renew is not None: + pulumi.set(__self__, "auto_renew", auto_renew) + if certificate_data is not None: + pulumi.set(__self__, "certificate_data", certificate_data) + if certificate_path is not None: + pulumi.set(__self__, "certificate_path", certificate_path) + if name is not None: + pulumi.set(__self__, "name", name) + if private_key is not None: + pulumi.set(__self__, "private_key", private_key) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + + @_builtins.property + @pulumi.getter(name="autoRenew") + def auto_renew(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether Dokploy should renew this certificate automatically. + """ + return pulumi.get(self, "auto_renew") + + @auto_renew.setter + def auto_renew(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "auto_renew", value) + + @_builtins.property + @pulumi.getter(name="certificateData") + def certificate_data(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + PEM-encoded certificate chain. + """ + return pulumi.get(self, "certificate_data") + + @certificate_data.setter + def certificate_data(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "certificate_data", value) + + @_builtins.property + @pulumi.getter(name="certificatePath") + def certificate_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path where Dokploy writes the certificate on disk. + """ + return pulumi.get(self, "certificate_path") + + @certificate_path.setter + def certificate_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "certificate_path", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the certificate. + """ + 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="privateKey") + def private_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + PEM-encoded private key. + """ + return pulumi.get(self, "private_key") + + @private_key.setter + def private_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "private_key", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server this certificate is installed on. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + +@pulumi.type_token("dokploy:index/certificate:Certificate") +class Certificate(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + auto_renew: Optional[pulumi.Input[_builtins.bool]] = None, + certificate_data: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Certificate resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.bool] auto_renew: Whether Dokploy should renew this certificate automatically. + :param pulumi.Input[_builtins.str] certificate_data: PEM-encoded certificate chain. + :param pulumi.Input[_builtins.str] name: Display name of the certificate. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] server_id: Server this certificate is installed on. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: CertificateArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Certificate resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param CertificateArgs 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(CertificateArgs, 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, + auto_renew: Optional[pulumi.Input[_builtins.bool]] = None, + certificate_data: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_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__ = CertificateArgs.__new__(CertificateArgs) + + __props__.__dict__["auto_renew"] = auto_renew + if certificate_data is None and not opts.urn: + raise TypeError("Missing required property 'certificate_data'") + __props__.__dict__["certificate_data"] = certificate_data + __props__.__dict__["name"] = name + if private_key is None and not opts.urn: + raise TypeError("Missing required property 'private_key'") + __props__.__dict__["private_key"] = None if private_key is None else pulumi.Output.secret(private_key) + __props__.__dict__["server_id"] = server_id + __props__.__dict__["certificate_path"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["privateKey"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Certificate, __self__).__init__( + 'dokploy:index/certificate:Certificate', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + auto_renew: Optional[pulumi.Input[_builtins.bool]] = None, + certificate_data: Optional[pulumi.Input[_builtins.str]] = None, + certificate_path: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Certificate': + """ + Get an existing Certificate 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.bool] auto_renew: Whether Dokploy should renew this certificate automatically. + :param pulumi.Input[_builtins.str] certificate_data: PEM-encoded certificate chain. + :param pulumi.Input[_builtins.str] certificate_path: Path where Dokploy writes the certificate on disk. + :param pulumi.Input[_builtins.str] name: Display name of the certificate. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] server_id: Server this certificate is installed on. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _CertificateState.__new__(_CertificateState) + + __props__.__dict__["auto_renew"] = auto_renew + __props__.__dict__["certificate_data"] = certificate_data + __props__.__dict__["certificate_path"] = certificate_path + __props__.__dict__["name"] = name + __props__.__dict__["private_key"] = private_key + __props__.__dict__["server_id"] = server_id + return Certificate(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="autoRenew") + def auto_renew(self) -> pulumi.Output[_builtins.bool]: + """ + Whether Dokploy should renew this certificate automatically. + """ + return pulumi.get(self, "auto_renew") + + @_builtins.property + @pulumi.getter(name="certificateData") + def certificate_data(self) -> pulumi.Output[_builtins.str]: + """ + PEM-encoded certificate chain. + """ + return pulumi.get(self, "certificate_data") + + @_builtins.property + @pulumi.getter(name="certificatePath") + def certificate_path(self) -> pulumi.Output[_builtins.str]: + """ + Path where Dokploy writes the certificate on disk. + """ + return pulumi.get(self, "certificate_path") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the certificate. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="privateKey") + def private_key(self) -> pulumi.Output[_builtins.str]: + """ + PEM-encoded private key. + """ + return pulumi.get(self, "private_key") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Server this certificate is installed on. + """ + return pulumi.get(self, "server_id") + diff --git a/sdk/python/pulumi_dokploy/compose.py b/sdk/python/pulumi_dokploy/compose.py new file mode 100644 index 0000000..9022f64 --- /dev/null +++ b/sdk/python/pulumi_dokploy/compose.py @@ -0,0 +1,2137 @@ +# 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__ = ['ComposeArgs', 'Compose'] + +@pulumi.input_type +class ComposeArgs: + def __init__(__self__, *, + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + compose_file: Optional[pulumi.Input[_builtins.str]] = None, + compose_path: Optional[pulumi.Input[_builtins.str]] = None, + compose_type: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + delete_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + isolated_deployment: Optional[pulumi.Input[_builtins.bool]] = None, + isolated_deployments_volume: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + randomize: Optional[pulumi.Input[_builtins.bool]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + suffix: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + The set of arguments for constructing a Compose resource. + + :param pulumi.Input[_builtins.str] environment_id: Environment this stack belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to deploy. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to deploy. + :param pulumi.Input[_builtins.str] command: Custom `docker compose` command to run. + :param pulumi.Input[_builtins.str] compose_file: Inline Compose file contents. Used when `source_type` is `raw`. + :param pulumi.Input[_builtins.str] compose_path: Path to the Compose file within the repository. + :param pulumi.Input[_builtins.str] compose_type: Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to deploy for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.bool] delete_volumes: Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to deploy. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to deploy. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.bool] isolated_deployment: Run the stack on its own isolated Docker network. + :param pulumi.Input[_builtins.bool] isolated_deployments_volume: Prefix volume names for isolated deployments. Retained for backwards compatibility. + :param pulumi.Input[_builtins.str] name: Display name of the stack. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.bool] randomize: Append a random suffix to service and volume names. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + :param pulumi.Input[_builtins.str] suffix: Suffix appended to generated resource names. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic deployment. Valid values: `push`, `tag`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if auto_deploy is not None: + pulumi.set(__self__, "auto_deploy", auto_deploy) + if bitbucket_branch is not None: + pulumi.set(__self__, "bitbucket_branch", bitbucket_branch) + if bitbucket_id is not None: + pulumi.set(__self__, "bitbucket_id", bitbucket_id) + if bitbucket_owner is not None: + pulumi.set(__self__, "bitbucket_owner", bitbucket_owner) + if bitbucket_repository is not None: + pulumi.set(__self__, "bitbucket_repository", bitbucket_repository) + if bitbucket_repository_slug is not None: + pulumi.set(__self__, "bitbucket_repository_slug", bitbucket_repository_slug) + if branch is not None: + pulumi.set(__self__, "branch", branch) + if command is not None: + pulumi.set(__self__, "command", command) + if compose_file is not None: + pulumi.set(__self__, "compose_file", compose_file) + if compose_path is not None: + pulumi.set(__self__, "compose_path", compose_path) + if compose_type is not None: + pulumi.set(__self__, "compose_type", compose_type) + if custom_git_branch is not None: + pulumi.set(__self__, "custom_git_branch", custom_git_branch) + if custom_git_ssh_key_id is not None: + pulumi.set(__self__, "custom_git_ssh_key_id", custom_git_ssh_key_id) + if custom_git_url is not None: + pulumi.set(__self__, "custom_git_url", custom_git_url) + if delete_volumes is not None: + pulumi.set(__self__, "delete_volumes", delete_volumes) + if description is not None: + pulumi.set(__self__, "description", description) + if enable_submodules is not None: + pulumi.set(__self__, "enable_submodules", enable_submodules) + if env is not None: + pulumi.set(__self__, "env", env) + if gitea_branch is not None: + pulumi.set(__self__, "gitea_branch", gitea_branch) + if gitea_id is not None: + pulumi.set(__self__, "gitea_id", gitea_id) + if gitea_owner is not None: + pulumi.set(__self__, "gitea_owner", gitea_owner) + if gitea_repository is not None: + pulumi.set(__self__, "gitea_repository", gitea_repository) + if github_id is not None: + pulumi.set(__self__, "github_id", github_id) + if gitlab_branch is not None: + pulumi.set(__self__, "gitlab_branch", gitlab_branch) + if gitlab_id is not None: + pulumi.set(__self__, "gitlab_id", gitlab_id) + if gitlab_owner is not None: + pulumi.set(__self__, "gitlab_owner", gitlab_owner) + if gitlab_path_namespace is not None: + pulumi.set(__self__, "gitlab_path_namespace", gitlab_path_namespace) + if gitlab_project_id is not None: + pulumi.set(__self__, "gitlab_project_id", gitlab_project_id) + if gitlab_repository is not None: + pulumi.set(__self__, "gitlab_repository", gitlab_repository) + if isolated_deployment is not None: + pulumi.set(__self__, "isolated_deployment", isolated_deployment) + if isolated_deployments_volume is not None: + pulumi.set(__self__, "isolated_deployments_volume", isolated_deployments_volume) + if name is not None: + pulumi.set(__self__, "name", name) + if owner is not None: + pulumi.set(__self__, "owner", owner) + if randomize is not None: + pulumi.set(__self__, "randomize", randomize) + if repository is not None: + pulumi.set(__self__, "repository", repository) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if source_type is not None: + pulumi.set(__self__, "source_type", source_type) + if suffix is not None: + pulumi.set(__self__, "suffix", suffix) + if trigger_type is not None: + pulumi.set(__self__, "trigger_type", trigger_type) + if watch_paths is not None: + pulumi.set(__self__, "watch_paths", watch_paths) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this stack belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="autoDeploy") + def auto_deploy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Deploy automatically when the configured trigger fires. + """ + return pulumi.get(self, "auto_deploy") + + @auto_deploy.setter + def auto_deploy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "auto_deploy", value) + + @_builtins.property + @pulumi.getter(name="bitbucketBranch") + def bitbucket_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket branch to deploy. + """ + return pulumi.get(self, "bitbucket_branch") + + @bitbucket_branch.setter + def bitbucket_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_branch", value) + + @_builtins.property + @pulumi.getter(name="bitbucketId") + def bitbucket_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Bitbucket provider connection. + """ + return pulumi.get(self, "bitbucket_id") + + @bitbucket_id.setter + def bitbucket_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_id", value) + + @_builtins.property + @pulumi.getter(name="bitbucketOwner") + def bitbucket_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository owner. + """ + return pulumi.get(self, "bitbucket_owner") + + @bitbucket_owner.setter + def bitbucket_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_owner", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepository") + def bitbucket_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository name. + """ + return pulumi.get(self, "bitbucket_repository") + + @bitbucket_repository.setter + def bitbucket_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepositorySlug") + def bitbucket_repository_slug(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository slug. + """ + return pulumi.get(self, "bitbucket_repository_slug") + + @bitbucket_repository_slug.setter + def bitbucket_repository_slug(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository_slug", value) + + @_builtins.property + @pulumi.getter + def branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub branch to deploy. + """ + return pulumi.get(self, "branch") + + @branch.setter + def branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "branch", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Custom `docker compose` command to run. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="composeFile") + def compose_file(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Inline Compose file contents. Used when `source_type` is `raw`. + """ + return pulumi.get(self, "compose_file") + + @compose_file.setter + def compose_file(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_file", value) + + @_builtins.property + @pulumi.getter(name="composePath") + def compose_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to the Compose file within the repository. + """ + return pulumi.get(self, "compose_path") + + @compose_path.setter + def compose_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_path", value) + + @_builtins.property + @pulumi.getter(name="composeType") + def compose_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + """ + return pulumi.get(self, "compose_type") + + @compose_type.setter + def compose_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_type", value) + + @_builtins.property + @pulumi.getter(name="customGitBranch") + def custom_git_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Branch to deploy for a custom Git remote. + """ + return pulumi.get(self, "custom_git_branch") + + @custom_git_branch.setter + def custom_git_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_branch", value) + + @_builtins.property + @pulumi.getter(name="customGitSshKeyId") + def custom_git_ssh_key_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + SSH key used to clone a private custom Git remote. + """ + return pulumi.get(self, "custom_git_ssh_key_id") + + @custom_git_ssh_key_id.setter + def custom_git_ssh_key_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_ssh_key_id", value) + + @_builtins.property + @pulumi.getter(name="customGitUrl") + def custom_git_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Git remote URL, when `source_type` is `git`. + """ + return pulumi.get(self, "custom_git_url") + + @custom_git_url.setter + def custom_git_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_url", value) + + @_builtins.property + @pulumi.getter(name="deleteVolumes") + def delete_volumes(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + """ + return pulumi.get(self, "delete_volumes") + + @delete_volumes.setter + def delete_volumes(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "delete_volumes", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="enableSubmodules") + def enable_submodules(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Clone Git submodules when checking out the repository. + """ + return pulumi.get(self, "enable_submodules") + + @enable_submodules.setter + def enable_submodules(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enable_submodules", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="giteaBranch") + def gitea_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea branch to deploy. + """ + return pulumi.get(self, "gitea_branch") + + @gitea_branch.setter + def gitea_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_branch", value) + + @_builtins.property + @pulumi.getter(name="giteaId") + def gitea_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Gitea provider connection. + """ + return pulumi.get(self, "gitea_id") + + @gitea_id.setter + def gitea_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_id", value) + + @_builtins.property + @pulumi.getter(name="giteaOwner") + def gitea_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository owner. + """ + return pulumi.get(self, "gitea_owner") + + @gitea_owner.setter + def gitea_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_owner", value) + + @_builtins.property + @pulumi.getter(name="giteaRepository") + def gitea_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository name. + """ + return pulumi.get(self, "gitea_repository") + + @gitea_repository.setter + def gitea_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_repository", value) + + @_builtins.property + @pulumi.getter(name="githubId") + def github_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitHub provider connection. + """ + return pulumi.get(self, "github_id") + + @github_id.setter + def github_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "github_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabBranch") + def gitlab_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab branch to deploy. + """ + return pulumi.get(self, "gitlab_branch") + + @gitlab_branch.setter + def gitlab_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_branch", value) + + @_builtins.property + @pulumi.getter(name="gitlabId") + def gitlab_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitLab provider connection. + """ + return pulumi.get(self, "gitlab_id") + + @gitlab_id.setter + def gitlab_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabOwner") + def gitlab_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository owner. + """ + return pulumi.get(self, "gitlab_owner") + + @gitlab_owner.setter + def gitlab_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_owner", value) + + @_builtins.property + @pulumi.getter(name="gitlabPathNamespace") + def gitlab_path_namespace(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Full GitLab namespace path. + """ + return pulumi.get(self, "gitlab_path_namespace") + + @gitlab_path_namespace.setter + def gitlab_path_namespace(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_path_namespace", value) + + @_builtins.property + @pulumi.getter(name="gitlabProjectId") + def gitlab_project_id(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Numeric GitLab project ID. + """ + return pulumi.get(self, "gitlab_project_id") + + @gitlab_project_id.setter + def gitlab_project_id(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "gitlab_project_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabRepository") + def gitlab_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository name. + """ + return pulumi.get(self, "gitlab_repository") + + @gitlab_repository.setter + def gitlab_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_repository", value) + + @_builtins.property + @pulumi.getter(name="isolatedDeployment") + def isolated_deployment(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Run the stack on its own isolated Docker network. + """ + return pulumi.get(self, "isolated_deployment") + + @isolated_deployment.setter + def isolated_deployment(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "isolated_deployment", value) + + @_builtins.property + @pulumi.getter(name="isolatedDeploymentsVolume") + def isolated_deployments_volume(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Prefix volume names for isolated deployments. Retained for backwards compatibility. + """ + return pulumi.get(self, "isolated_deployments_volume") + + @isolated_deployments_volume.setter + def isolated_deployments_volume(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "isolated_deployments_volume", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the stack. + """ + 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 owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository owner. + """ + return pulumi.get(self, "owner") + + @owner.setter + def owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "owner", value) + + @_builtins.property + @pulumi.getter + def randomize(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Append a random suffix to service and volume names. + """ + return pulumi.get(self, "randomize") + + @randomize.setter + def randomize(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "randomize", value) + + @_builtins.property + @pulumi.getter + def repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository name. + """ + return pulumi.get(self, "repository") + + @repository.setter + def repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "repository", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + """ + return pulumi.get(self, "source_type") + + @source_type.setter + def source_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "source_type", value) + + @_builtins.property + @pulumi.getter + def suffix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Suffix appended to generated resource names. + """ + return pulumi.get(self, "suffix") + + @suffix.setter + def suffix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "suffix", value) + + @_builtins.property + @pulumi.getter(name="triggerType") + def trigger_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + What triggers an automatic deployment. Valid values: `push`, `tag`. + """ + return pulumi.get(self, "trigger_type") + + @trigger_type.setter + def trigger_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "trigger_type", value) + + @_builtins.property + @pulumi.getter(name="watchPaths") + def watch_paths(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Glob patterns that limit which changed paths trigger an automatic deployment. + """ + return pulumi.get(self, "watch_paths") + + @watch_paths.setter + def watch_paths(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "watch_paths", value) + + +@pulumi.input_type +class _ComposeState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + compose_file: Optional[pulumi.Input[_builtins.str]] = None, + compose_path: Optional[pulumi.Input[_builtins.str]] = None, + compose_status: Optional[pulumi.Input[_builtins.str]] = None, + compose_type: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + delete_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + isolated_deployment: Optional[pulumi.Input[_builtins.bool]] = None, + isolated_deployments_volume: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + randomize: Optional[pulumi.Input[_builtins.bool]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + suffix: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + Input properties used for looking up and filtering Compose resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to deploy. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to deploy. + :param pulumi.Input[_builtins.str] command: Custom `docker compose` command to run. + :param pulumi.Input[_builtins.str] compose_file: Inline Compose file contents. Used when `source_type` is `raw`. + :param pulumi.Input[_builtins.str] compose_path: Path to the Compose file within the repository. + :param pulumi.Input[_builtins.str] compose_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[_builtins.str] compose_type: Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the stack was created. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to deploy for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.bool] delete_volumes: Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this stack belongs to. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to deploy. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to deploy. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.bool] isolated_deployment: Run the stack on its own isolated Docker network. + :param pulumi.Input[_builtins.bool] isolated_deployments_volume: Prefix volume names for isolated deployments. Retained for backwards compatibility. + :param pulumi.Input[_builtins.str] name: Display name of the stack. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.bool] randomize: Append a random suffix to service and volume names. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + :param pulumi.Input[_builtins.str] suffix: Suffix appended to generated resource names. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic deployment. Valid values: `push`, `tag`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if auto_deploy is not None: + pulumi.set(__self__, "auto_deploy", auto_deploy) + if bitbucket_branch is not None: + pulumi.set(__self__, "bitbucket_branch", bitbucket_branch) + if bitbucket_id is not None: + pulumi.set(__self__, "bitbucket_id", bitbucket_id) + if bitbucket_owner is not None: + pulumi.set(__self__, "bitbucket_owner", bitbucket_owner) + if bitbucket_repository is not None: + pulumi.set(__self__, "bitbucket_repository", bitbucket_repository) + if bitbucket_repository_slug is not None: + pulumi.set(__self__, "bitbucket_repository_slug", bitbucket_repository_slug) + if branch is not None: + pulumi.set(__self__, "branch", branch) + if command is not None: + pulumi.set(__self__, "command", command) + if compose_file is not None: + pulumi.set(__self__, "compose_file", compose_file) + if compose_path is not None: + pulumi.set(__self__, "compose_path", compose_path) + if compose_status is not None: + pulumi.set(__self__, "compose_status", compose_status) + if compose_type is not None: + pulumi.set(__self__, "compose_type", compose_type) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if custom_git_branch is not None: + pulumi.set(__self__, "custom_git_branch", custom_git_branch) + if custom_git_ssh_key_id is not None: + pulumi.set(__self__, "custom_git_ssh_key_id", custom_git_ssh_key_id) + if custom_git_url is not None: + pulumi.set(__self__, "custom_git_url", custom_git_url) + if delete_volumes is not None: + pulumi.set(__self__, "delete_volumes", delete_volumes) + if description is not None: + pulumi.set(__self__, "description", description) + if enable_submodules is not None: + pulumi.set(__self__, "enable_submodules", enable_submodules) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if gitea_branch is not None: + pulumi.set(__self__, "gitea_branch", gitea_branch) + if gitea_id is not None: + pulumi.set(__self__, "gitea_id", gitea_id) + if gitea_owner is not None: + pulumi.set(__self__, "gitea_owner", gitea_owner) + if gitea_repository is not None: + pulumi.set(__self__, "gitea_repository", gitea_repository) + if github_id is not None: + pulumi.set(__self__, "github_id", github_id) + if gitlab_branch is not None: + pulumi.set(__self__, "gitlab_branch", gitlab_branch) + if gitlab_id is not None: + pulumi.set(__self__, "gitlab_id", gitlab_id) + if gitlab_owner is not None: + pulumi.set(__self__, "gitlab_owner", gitlab_owner) + if gitlab_path_namespace is not None: + pulumi.set(__self__, "gitlab_path_namespace", gitlab_path_namespace) + if gitlab_project_id is not None: + pulumi.set(__self__, "gitlab_project_id", gitlab_project_id) + if gitlab_repository is not None: + pulumi.set(__self__, "gitlab_repository", gitlab_repository) + if isolated_deployment is not None: + pulumi.set(__self__, "isolated_deployment", isolated_deployment) + if isolated_deployments_volume is not None: + pulumi.set(__self__, "isolated_deployments_volume", isolated_deployments_volume) + if name is not None: + pulumi.set(__self__, "name", name) + if owner is not None: + pulumi.set(__self__, "owner", owner) + if randomize is not None: + pulumi.set(__self__, "randomize", randomize) + if repository is not None: + pulumi.set(__self__, "repository", repository) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if source_type is not None: + pulumi.set(__self__, "source_type", source_type) + if suffix is not None: + pulumi.set(__self__, "suffix", suffix) + if trigger_type is not None: + pulumi.set(__self__, "trigger_type", trigger_type) + if watch_paths is not None: + pulumi.set(__self__, "watch_paths", watch_paths) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="autoDeploy") + def auto_deploy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Deploy automatically when the configured trigger fires. + """ + return pulumi.get(self, "auto_deploy") + + @auto_deploy.setter + def auto_deploy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "auto_deploy", value) + + @_builtins.property + @pulumi.getter(name="bitbucketBranch") + def bitbucket_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket branch to deploy. + """ + return pulumi.get(self, "bitbucket_branch") + + @bitbucket_branch.setter + def bitbucket_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_branch", value) + + @_builtins.property + @pulumi.getter(name="bitbucketId") + def bitbucket_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Bitbucket provider connection. + """ + return pulumi.get(self, "bitbucket_id") + + @bitbucket_id.setter + def bitbucket_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_id", value) + + @_builtins.property + @pulumi.getter(name="bitbucketOwner") + def bitbucket_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository owner. + """ + return pulumi.get(self, "bitbucket_owner") + + @bitbucket_owner.setter + def bitbucket_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_owner", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepository") + def bitbucket_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository name. + """ + return pulumi.get(self, "bitbucket_repository") + + @bitbucket_repository.setter + def bitbucket_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository", value) + + @_builtins.property + @pulumi.getter(name="bitbucketRepositorySlug") + def bitbucket_repository_slug(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bitbucket repository slug. + """ + return pulumi.get(self, "bitbucket_repository_slug") + + @bitbucket_repository_slug.setter + def bitbucket_repository_slug(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bitbucket_repository_slug", value) + + @_builtins.property + @pulumi.getter + def branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub branch to deploy. + """ + return pulumi.get(self, "branch") + + @branch.setter + def branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "branch", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Custom `docker compose` command to run. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="composeFile") + def compose_file(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Inline Compose file contents. Used when `source_type` is `raw`. + """ + return pulumi.get(self, "compose_file") + + @compose_file.setter + def compose_file(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_file", value) + + @_builtins.property + @pulumi.getter(name="composePath") + def compose_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to the Compose file within the repository. + """ + return pulumi.get(self, "compose_path") + + @compose_path.setter + def compose_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_path", value) + + @_builtins.property + @pulumi.getter(name="composeStatus") + def compose_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "compose_status") + + @compose_status.setter + def compose_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_status", value) + + @_builtins.property + @pulumi.getter(name="composeType") + def compose_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + """ + return pulumi.get(self, "compose_type") + + @compose_type.setter + def compose_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_type", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the stack was created. + """ + 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(name="customGitBranch") + def custom_git_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Branch to deploy for a custom Git remote. + """ + return pulumi.get(self, "custom_git_branch") + + @custom_git_branch.setter + def custom_git_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_branch", value) + + @_builtins.property + @pulumi.getter(name="customGitSshKeyId") + def custom_git_ssh_key_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + SSH key used to clone a private custom Git remote. + """ + return pulumi.get(self, "custom_git_ssh_key_id") + + @custom_git_ssh_key_id.setter + def custom_git_ssh_key_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_ssh_key_id", value) + + @_builtins.property + @pulumi.getter(name="customGitUrl") + def custom_git_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Git remote URL, when `source_type` is `git`. + """ + return pulumi.get(self, "custom_git_url") + + @custom_git_url.setter + def custom_git_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_git_url", value) + + @_builtins.property + @pulumi.getter(name="deleteVolumes") + def delete_volumes(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + """ + return pulumi.get(self, "delete_volumes") + + @delete_volumes.setter + def delete_volumes(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "delete_volumes", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="enableSubmodules") + def enable_submodules(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Clone Git submodules when checking out the repository. + """ + return pulumi.get(self, "enable_submodules") + + @enable_submodules.setter + def enable_submodules(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enable_submodules", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this stack belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="giteaBranch") + def gitea_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea branch to deploy. + """ + return pulumi.get(self, "gitea_branch") + + @gitea_branch.setter + def gitea_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_branch", value) + + @_builtins.property + @pulumi.getter(name="giteaId") + def gitea_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured Gitea provider connection. + """ + return pulumi.get(self, "gitea_id") + + @gitea_id.setter + def gitea_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_id", value) + + @_builtins.property + @pulumi.getter(name="giteaOwner") + def gitea_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository owner. + """ + return pulumi.get(self, "gitea_owner") + + @gitea_owner.setter + def gitea_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_owner", value) + + @_builtins.property + @pulumi.getter(name="giteaRepository") + def gitea_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Gitea repository name. + """ + return pulumi.get(self, "gitea_repository") + + @gitea_repository.setter + def gitea_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitea_repository", value) + + @_builtins.property + @pulumi.getter(name="githubId") + def github_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitHub provider connection. + """ + return pulumi.get(self, "github_id") + + @github_id.setter + def github_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "github_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabBranch") + def gitlab_branch(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab branch to deploy. + """ + return pulumi.get(self, "gitlab_branch") + + @gitlab_branch.setter + def gitlab_branch(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_branch", value) + + @_builtins.property + @pulumi.getter(name="gitlabId") + def gitlab_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the configured GitLab provider connection. + """ + return pulumi.get(self, "gitlab_id") + + @gitlab_id.setter + def gitlab_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabOwner") + def gitlab_owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository owner. + """ + return pulumi.get(self, "gitlab_owner") + + @gitlab_owner.setter + def gitlab_owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_owner", value) + + @_builtins.property + @pulumi.getter(name="gitlabPathNamespace") + def gitlab_path_namespace(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Full GitLab namespace path. + """ + return pulumi.get(self, "gitlab_path_namespace") + + @gitlab_path_namespace.setter + def gitlab_path_namespace(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_path_namespace", value) + + @_builtins.property + @pulumi.getter(name="gitlabProjectId") + def gitlab_project_id(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Numeric GitLab project ID. + """ + return pulumi.get(self, "gitlab_project_id") + + @gitlab_project_id.setter + def gitlab_project_id(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "gitlab_project_id", value) + + @_builtins.property + @pulumi.getter(name="gitlabRepository") + def gitlab_repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitLab repository name. + """ + return pulumi.get(self, "gitlab_repository") + + @gitlab_repository.setter + def gitlab_repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "gitlab_repository", value) + + @_builtins.property + @pulumi.getter(name="isolatedDeployment") + def isolated_deployment(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Run the stack on its own isolated Docker network. + """ + return pulumi.get(self, "isolated_deployment") + + @isolated_deployment.setter + def isolated_deployment(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "isolated_deployment", value) + + @_builtins.property + @pulumi.getter(name="isolatedDeploymentsVolume") + def isolated_deployments_volume(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Prefix volume names for isolated deployments. Retained for backwards compatibility. + """ + return pulumi.get(self, "isolated_deployments_volume") + + @isolated_deployments_volume.setter + def isolated_deployments_volume(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "isolated_deployments_volume", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the stack. + """ + 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 owner(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository owner. + """ + return pulumi.get(self, "owner") + + @owner.setter + def owner(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "owner", value) + + @_builtins.property + @pulumi.getter + def randomize(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Append a random suffix to service and volume names. + """ + return pulumi.get(self, "randomize") + + @randomize.setter + def randomize(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "randomize", value) + + @_builtins.property + @pulumi.getter + def repository(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + GitHub repository name. + """ + return pulumi.get(self, "repository") + + @repository.setter + def repository(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "repository", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + """ + return pulumi.get(self, "source_type") + + @source_type.setter + def source_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "source_type", value) + + @_builtins.property + @pulumi.getter + def suffix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Suffix appended to generated resource names. + """ + return pulumi.get(self, "suffix") + + @suffix.setter + def suffix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "suffix", value) + + @_builtins.property + @pulumi.getter(name="triggerType") + def trigger_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + What triggers an automatic deployment. Valid values: `push`, `tag`. + """ + return pulumi.get(self, "trigger_type") + + @trigger_type.setter + def trigger_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "trigger_type", value) + + @_builtins.property + @pulumi.getter(name="watchPaths") + def watch_paths(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Glob patterns that limit which changed paths trigger an automatic deployment. + """ + return pulumi.get(self, "watch_paths") + + @watch_paths.setter + def watch_paths(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "watch_paths", value) + + +@pulumi.type_token("dokploy:index/compose:Compose") +class Compose(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + compose_file: Optional[pulumi.Input[_builtins.str]] = None, + compose_path: Optional[pulumi.Input[_builtins.str]] = None, + compose_type: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + delete_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + isolated_deployment: Optional[pulumi.Input[_builtins.bool]] = None, + isolated_deployments_volume: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + randomize: Optional[pulumi.Input[_builtins.bool]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + suffix: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + __props__=None): + """ + Create a Compose resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to deploy. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to deploy. + :param pulumi.Input[_builtins.str] command: Custom `docker compose` command to run. + :param pulumi.Input[_builtins.str] compose_file: Inline Compose file contents. Used when `source_type` is `raw`. + :param pulumi.Input[_builtins.str] compose_path: Path to the Compose file within the repository. + :param pulumi.Input[_builtins.str] compose_type: Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to deploy for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.bool] delete_volumes: Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this stack belongs to. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to deploy. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to deploy. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.bool] isolated_deployment: Run the stack on its own isolated Docker network. + :param pulumi.Input[_builtins.bool] isolated_deployments_volume: Prefix volume names for isolated deployments. Retained for backwards compatibility. + :param pulumi.Input[_builtins.str] name: Display name of the stack. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.bool] randomize: Append a random suffix to service and volume names. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + :param pulumi.Input[_builtins.str] suffix: Suffix appended to generated resource names. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic deployment. Valid values: `push`, `tag`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ComposeArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Compose resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param ComposeArgs 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(ComposeArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + compose_file: Optional[pulumi.Input[_builtins.str]] = None, + compose_path: Optional[pulumi.Input[_builtins.str]] = None, + compose_type: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + delete_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + isolated_deployment: Optional[pulumi.Input[_builtins.bool]] = None, + isolated_deployments_volume: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + randomize: Optional[pulumi.Input[_builtins.bool]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + suffix: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_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__ = ComposeArgs.__new__(ComposeArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["auto_deploy"] = auto_deploy + __props__.__dict__["bitbucket_branch"] = bitbucket_branch + __props__.__dict__["bitbucket_id"] = bitbucket_id + __props__.__dict__["bitbucket_owner"] = bitbucket_owner + __props__.__dict__["bitbucket_repository"] = bitbucket_repository + __props__.__dict__["bitbucket_repository_slug"] = bitbucket_repository_slug + __props__.__dict__["branch"] = branch + __props__.__dict__["command"] = command + __props__.__dict__["compose_file"] = compose_file + __props__.__dict__["compose_path"] = compose_path + __props__.__dict__["compose_type"] = compose_type + __props__.__dict__["custom_git_branch"] = custom_git_branch + __props__.__dict__["custom_git_ssh_key_id"] = custom_git_ssh_key_id + __props__.__dict__["custom_git_url"] = custom_git_url + __props__.__dict__["delete_volumes"] = delete_volumes + __props__.__dict__["description"] = description + __props__.__dict__["enable_submodules"] = enable_submodules + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["gitea_branch"] = gitea_branch + __props__.__dict__["gitea_id"] = gitea_id + __props__.__dict__["gitea_owner"] = gitea_owner + __props__.__dict__["gitea_repository"] = gitea_repository + __props__.__dict__["github_id"] = github_id + __props__.__dict__["gitlab_branch"] = gitlab_branch + __props__.__dict__["gitlab_id"] = gitlab_id + __props__.__dict__["gitlab_owner"] = gitlab_owner + __props__.__dict__["gitlab_path_namespace"] = gitlab_path_namespace + __props__.__dict__["gitlab_project_id"] = gitlab_project_id + __props__.__dict__["gitlab_repository"] = gitlab_repository + __props__.__dict__["isolated_deployment"] = isolated_deployment + __props__.__dict__["isolated_deployments_volume"] = isolated_deployments_volume + __props__.__dict__["name"] = name + __props__.__dict__["owner"] = owner + __props__.__dict__["randomize"] = randomize + __props__.__dict__["repository"] = repository + __props__.__dict__["server_id"] = server_id + __props__.__dict__["source_type"] = source_type + __props__.__dict__["suffix"] = suffix + __props__.__dict__["trigger_type"] = trigger_type + __props__.__dict__["watch_paths"] = watch_paths + __props__.__dict__["compose_status"] = None + __props__.__dict__["created_at"] = None + super(Compose, __self__).__init__( + 'dokploy:index/compose:Compose', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + auto_deploy: Optional[pulumi.Input[_builtins.bool]] = None, + bitbucket_branch: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_id: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_owner: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository: Optional[pulumi.Input[_builtins.str]] = None, + bitbucket_repository_slug: Optional[pulumi.Input[_builtins.str]] = None, + branch: Optional[pulumi.Input[_builtins.str]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + compose_file: Optional[pulumi.Input[_builtins.str]] = None, + compose_path: Optional[pulumi.Input[_builtins.str]] = None, + compose_status: Optional[pulumi.Input[_builtins.str]] = None, + compose_type: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_branch: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_ssh_key_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_git_url: Optional[pulumi.Input[_builtins.str]] = None, + delete_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + enable_submodules: Optional[pulumi.Input[_builtins.bool]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitea_id: Optional[pulumi.Input[_builtins.str]] = None, + gitea_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitea_repository: Optional[pulumi.Input[_builtins.str]] = None, + github_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_branch: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_id: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_owner: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_path_namespace: Optional[pulumi.Input[_builtins.str]] = None, + gitlab_project_id: Optional[pulumi.Input[_builtins.int]] = None, + gitlab_repository: Optional[pulumi.Input[_builtins.str]] = None, + isolated_deployment: Optional[pulumi.Input[_builtins.bool]] = None, + isolated_deployments_volume: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + owner: Optional[pulumi.Input[_builtins.str]] = None, + randomize: Optional[pulumi.Input[_builtins.bool]] = None, + repository: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + source_type: Optional[pulumi.Input[_builtins.str]] = None, + suffix: Optional[pulumi.Input[_builtins.str]] = None, + trigger_type: Optional[pulumi.Input[_builtins.str]] = None, + watch_paths: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None) -> 'Compose': + """ + Get an existing Compose 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] app_name: Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + :param pulumi.Input[_builtins.bool] auto_deploy: Deploy automatically when the configured trigger fires. + :param pulumi.Input[_builtins.str] bitbucket_branch: Bitbucket branch to deploy. + :param pulumi.Input[_builtins.str] bitbucket_id: ID of the configured Bitbucket provider connection. + :param pulumi.Input[_builtins.str] bitbucket_owner: Bitbucket repository owner. + :param pulumi.Input[_builtins.str] bitbucket_repository: Bitbucket repository name. + :param pulumi.Input[_builtins.str] bitbucket_repository_slug: Bitbucket repository slug. + :param pulumi.Input[_builtins.str] branch: GitHub branch to deploy. + :param pulumi.Input[_builtins.str] command: Custom `docker compose` command to run. + :param pulumi.Input[_builtins.str] compose_file: Inline Compose file contents. Used when `source_type` is `raw`. + :param pulumi.Input[_builtins.str] compose_path: Path to the Compose file within the repository. + :param pulumi.Input[_builtins.str] compose_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[_builtins.str] compose_type: Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the stack was created. + :param pulumi.Input[_builtins.str] custom_git_branch: Branch to deploy for a custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_ssh_key_id: SSH key used to clone a private custom Git remote. + :param pulumi.Input[_builtins.str] custom_git_url: Git remote URL, when `source_type` is `git`. + :param pulumi.Input[_builtins.bool] delete_volumes: Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] enable_submodules: Clone Git submodules when checking out the repository. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this stack belongs to. + :param pulumi.Input[_builtins.str] gitea_branch: Gitea branch to deploy. + :param pulumi.Input[_builtins.str] gitea_id: ID of the configured Gitea provider connection. + :param pulumi.Input[_builtins.str] gitea_owner: Gitea repository owner. + :param pulumi.Input[_builtins.str] gitea_repository: Gitea repository name. + :param pulumi.Input[_builtins.str] github_id: ID of the configured GitHub provider connection. + :param pulumi.Input[_builtins.str] gitlab_branch: GitLab branch to deploy. + :param pulumi.Input[_builtins.str] gitlab_id: ID of the configured GitLab provider connection. + :param pulumi.Input[_builtins.str] gitlab_owner: GitLab repository owner. + :param pulumi.Input[_builtins.str] gitlab_path_namespace: Full GitLab namespace path. + :param pulumi.Input[_builtins.int] gitlab_project_id: Numeric GitLab project ID. + :param pulumi.Input[_builtins.str] gitlab_repository: GitLab repository name. + :param pulumi.Input[_builtins.bool] isolated_deployment: Run the stack on its own isolated Docker network. + :param pulumi.Input[_builtins.bool] isolated_deployments_volume: Prefix volume names for isolated deployments. Retained for backwards compatibility. + :param pulumi.Input[_builtins.str] name: Display name of the stack. + :param pulumi.Input[_builtins.str] owner: GitHub repository owner. + :param pulumi.Input[_builtins.bool] randomize: Append a random suffix to service and volume names. + :param pulumi.Input[_builtins.str] repository: GitHub repository name. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.str] source_type: Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + :param pulumi.Input[_builtins.str] suffix: Suffix appended to generated resource names. + :param pulumi.Input[_builtins.str] trigger_type: What triggers an automatic deployment. Valid values: `push`, `tag`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] watch_paths: Glob patterns that limit which changed paths trigger an automatic deployment. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ComposeState.__new__(_ComposeState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["auto_deploy"] = auto_deploy + __props__.__dict__["bitbucket_branch"] = bitbucket_branch + __props__.__dict__["bitbucket_id"] = bitbucket_id + __props__.__dict__["bitbucket_owner"] = bitbucket_owner + __props__.__dict__["bitbucket_repository"] = bitbucket_repository + __props__.__dict__["bitbucket_repository_slug"] = bitbucket_repository_slug + __props__.__dict__["branch"] = branch + __props__.__dict__["command"] = command + __props__.__dict__["compose_file"] = compose_file + __props__.__dict__["compose_path"] = compose_path + __props__.__dict__["compose_status"] = compose_status + __props__.__dict__["compose_type"] = compose_type + __props__.__dict__["created_at"] = created_at + __props__.__dict__["custom_git_branch"] = custom_git_branch + __props__.__dict__["custom_git_ssh_key_id"] = custom_git_ssh_key_id + __props__.__dict__["custom_git_url"] = custom_git_url + __props__.__dict__["delete_volumes"] = delete_volumes + __props__.__dict__["description"] = description + __props__.__dict__["enable_submodules"] = enable_submodules + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["gitea_branch"] = gitea_branch + __props__.__dict__["gitea_id"] = gitea_id + __props__.__dict__["gitea_owner"] = gitea_owner + __props__.__dict__["gitea_repository"] = gitea_repository + __props__.__dict__["github_id"] = github_id + __props__.__dict__["gitlab_branch"] = gitlab_branch + __props__.__dict__["gitlab_id"] = gitlab_id + __props__.__dict__["gitlab_owner"] = gitlab_owner + __props__.__dict__["gitlab_path_namespace"] = gitlab_path_namespace + __props__.__dict__["gitlab_project_id"] = gitlab_project_id + __props__.__dict__["gitlab_repository"] = gitlab_repository + __props__.__dict__["isolated_deployment"] = isolated_deployment + __props__.__dict__["isolated_deployments_volume"] = isolated_deployments_volume + __props__.__dict__["name"] = name + __props__.__dict__["owner"] = owner + __props__.__dict__["randomize"] = randomize + __props__.__dict__["repository"] = repository + __props__.__dict__["server_id"] = server_id + __props__.__dict__["source_type"] = source_type + __props__.__dict__["suffix"] = suffix + __props__.__dict__["trigger_type"] = trigger_type + __props__.__dict__["watch_paths"] = watch_paths + return Compose(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="autoDeploy") + def auto_deploy(self) -> pulumi.Output[_builtins.bool]: + """ + Deploy automatically when the configured trigger fires. + """ + return pulumi.get(self, "auto_deploy") + + @_builtins.property + @pulumi.getter(name="bitbucketBranch") + def bitbucket_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket branch to deploy. + """ + return pulumi.get(self, "bitbucket_branch") + + @_builtins.property + @pulumi.getter(name="bitbucketId") + def bitbucket_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured Bitbucket provider connection. + """ + return pulumi.get(self, "bitbucket_id") + + @_builtins.property + @pulumi.getter(name="bitbucketOwner") + def bitbucket_owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket repository owner. + """ + return pulumi.get(self, "bitbucket_owner") + + @_builtins.property + @pulumi.getter(name="bitbucketRepository") + def bitbucket_repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket repository name. + """ + return pulumi.get(self, "bitbucket_repository") + + @_builtins.property + @pulumi.getter(name="bitbucketRepositorySlug") + def bitbucket_repository_slug(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Bitbucket repository slug. + """ + return pulumi.get(self, "bitbucket_repository_slug") + + @_builtins.property + @pulumi.getter + def branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitHub branch to deploy. + """ + return pulumi.get(self, "branch") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[_builtins.str]: + """ + Custom `docker compose` command to run. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="composeFile") + def compose_file(self) -> pulumi.Output[_builtins.str]: + """ + Inline Compose file contents. Used when `source_type` is `raw`. + """ + return pulumi.get(self, "compose_file") + + @_builtins.property + @pulumi.getter(name="composePath") + def compose_path(self) -> pulumi.Output[_builtins.str]: + """ + Path to the Compose file within the repository. + """ + return pulumi.get(self, "compose_path") + + @_builtins.property + @pulumi.getter(name="composeStatus") + def compose_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "compose_status") + + @_builtins.property + @pulumi.getter(name="composeType") + def compose_type(self) -> pulumi.Output[_builtins.str]: + """ + Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `stack`. + """ + return pulumi.get(self, "compose_type") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the stack was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="customGitBranch") + def custom_git_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Branch to deploy for a custom Git remote. + """ + return pulumi.get(self, "custom_git_branch") + + @_builtins.property + @pulumi.getter(name="customGitSshKeyId") + def custom_git_ssh_key_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + SSH key used to clone a private custom Git remote. + """ + return pulumi.get(self, "custom_git_ssh_key_id") + + @_builtins.property + @pulumi.getter(name="customGitUrl") + def custom_git_url(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Git remote URL, when `source_type` is `git`. + """ + return pulumi.get(self, "custom_git_url") + + @_builtins.property + @pulumi.getter(name="deleteVolumes") + def delete_volumes(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `false`, which preserves the data. + """ + return pulumi.get(self, "delete_volumes") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="enableSubmodules") + def enable_submodules(self) -> pulumi.Output[_builtins.bool]: + """ + Clone Git submodules when checking out the repository. + """ + return pulumi.get(self, "enable_submodules") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this stack belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="giteaBranch") + def gitea_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Gitea branch to deploy. + """ + return pulumi.get(self, "gitea_branch") + + @_builtins.property + @pulumi.getter(name="giteaId") + def gitea_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured Gitea provider connection. + """ + return pulumi.get(self, "gitea_id") + + @_builtins.property + @pulumi.getter(name="giteaOwner") + def gitea_owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Gitea repository owner. + """ + return pulumi.get(self, "gitea_owner") + + @_builtins.property + @pulumi.getter(name="giteaRepository") + def gitea_repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Gitea repository name. + """ + return pulumi.get(self, "gitea_repository") + + @_builtins.property + @pulumi.getter(name="githubId") + def github_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured GitHub provider connection. + """ + return pulumi.get(self, "github_id") + + @_builtins.property + @pulumi.getter(name="gitlabBranch") + def gitlab_branch(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitLab branch to deploy. + """ + return pulumi.get(self, "gitlab_branch") + + @_builtins.property + @pulumi.getter(name="gitlabId") + def gitlab_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + ID of the configured GitLab provider connection. + """ + return pulumi.get(self, "gitlab_id") + + @_builtins.property + @pulumi.getter(name="gitlabOwner") + def gitlab_owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitLab repository owner. + """ + return pulumi.get(self, "gitlab_owner") + + @_builtins.property + @pulumi.getter(name="gitlabPathNamespace") + def gitlab_path_namespace(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Full GitLab namespace path. + """ + return pulumi.get(self, "gitlab_path_namespace") + + @_builtins.property + @pulumi.getter(name="gitlabProjectId") + def gitlab_project_id(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Numeric GitLab project ID. + """ + return pulumi.get(self, "gitlab_project_id") + + @_builtins.property + @pulumi.getter(name="gitlabRepository") + def gitlab_repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitLab repository name. + """ + return pulumi.get(self, "gitlab_repository") + + @_builtins.property + @pulumi.getter(name="isolatedDeployment") + def isolated_deployment(self) -> pulumi.Output[_builtins.bool]: + """ + Run the stack on its own isolated Docker network. + """ + return pulumi.get(self, "isolated_deployment") + + @_builtins.property + @pulumi.getter(name="isolatedDeploymentsVolume") + def isolated_deployments_volume(self) -> pulumi.Output[_builtins.bool]: + """ + Prefix volume names for isolated deployments. Retained for backwards compatibility. + """ + return pulumi.get(self, "isolated_deployments_volume") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the stack. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter + def owner(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitHub repository owner. + """ + return pulumi.get(self, "owner") + + @_builtins.property + @pulumi.getter + def randomize(self) -> pulumi.Output[_builtins.bool]: + """ + Append a random suffix to service and volume names. + """ + return pulumi.get(self, "randomize") + + @_builtins.property + @pulumi.getter + def repository(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + GitHub repository name. + """ + return pulumi.get(self, "repository") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> pulumi.Output[_builtins.str]: + """ + Where the Compose file comes from. Valid values: `git`, `github`, `gitlab`, `bitbucket`, `gitea`, `raw`. + """ + return pulumi.get(self, "source_type") + + @_builtins.property + @pulumi.getter + def suffix(self) -> pulumi.Output[_builtins.str]: + """ + Suffix appended to generated resource names. + """ + return pulumi.get(self, "suffix") + + @_builtins.property + @pulumi.getter(name="triggerType") + def trigger_type(self) -> pulumi.Output[_builtins.str]: + """ + What triggers an automatic deployment. Valid values: `push`, `tag`. + """ + return pulumi.get(self, "trigger_type") + + @_builtins.property + @pulumi.getter(name="watchPaths") + def watch_paths(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Glob patterns that limit which changed paths trigger an automatic deployment. + """ + return pulumi.get(self, "watch_paths") + diff --git a/sdk/python/pulumi_dokploy/config/__init__.py b/sdk/python/pulumi_dokploy/config/__init__.py new file mode 100644 index 0000000..43ec6e2 --- /dev/null +++ b/sdk/python/pulumi_dokploy/config/__init__.py @@ -0,0 +1,9 @@ +# 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 sys +from .vars import _ExportableConfig + +sys.modules[__name__].__class__ = _ExportableConfig diff --git a/sdk/python/pulumi_dokploy/config/__init__.pyi b/sdk/python/pulumi_dokploy/config/__init__.pyi new file mode 100644 index 0000000..a9f0d10 --- /dev/null +++ b/sdk/python/pulumi_dokploy/config/__init__.pyi @@ -0,0 +1,36 @@ +# 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 + +apiKey: Optional[str] +""" +API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. +""" + +host: Optional[str] +""" +Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. +""" + +insecureSkipVerify: Optional[bool] +""" +Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. +""" + +timeoutSeconds: Optional[int] +""" +Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. +""" + diff --git a/sdk/python/pulumi_dokploy/config/vars.py b/sdk/python/pulumi_dokploy/config/vars.py new file mode 100644 index 0000000..de99e92 --- /dev/null +++ b/sdk/python/pulumi_dokploy/config/vars.py @@ -0,0 +1,50 @@ +# 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 + +import types + +__config__ = pulumi.Config('dokploy') + + +class _ExportableConfig(types.ModuleType): + @_builtins.property + def api_key(self) -> Optional[str]: + """ + API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + """ + return __config__.get('apiKey') or _utilities.get_env('DOKPLOY_API_KEY') + + @_builtins.property + def host(self) -> Optional[str]: + """ + Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + """ + return __config__.get('host') or _utilities.get_env('DOKPLOY_HOST') + + @_builtins.property + def insecure_skip_verify(self) -> Optional[bool]: + """ + Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + """ + return __config__.get_bool('insecureSkipVerify') + + @_builtins.property + def timeout_seconds(self) -> Optional[int]: + """ + Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + """ + return __config__.get_int('timeoutSeconds') or _utilities.get_env_int('DOKPLOY_TIMEOUT_SECONDS') + diff --git a/sdk/python/pulumi_dokploy/destination.py b/sdk/python/pulumi_dokploy/destination.py new file mode 100644 index 0000000..a3fc7d9 --- /dev/null +++ b/sdk/python/pulumi_dokploy/destination.py @@ -0,0 +1,564 @@ +# 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__ = ['DestinationArgs', 'Destination'] + +@pulumi.input_type +class DestinationArgs: + def __init__(__self__, *, + access_key: pulumi.Input[_builtins.str], + bucket: pulumi.Input[_builtins.str], + endpoint: pulumi.Input[_builtins.str], + region: pulumi.Input[_builtins.str], + secret_access_key: pulumi.Input[_builtins.str], + additional_flags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + provider_name: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Destination resource. + + :param pulumi.Input[_builtins.str] access_key: S3 access key ID. + :param pulumi.Input[_builtins.str] bucket: Bucket name. + :param pulumi.Input[_builtins.str] endpoint: S3 endpoint URL. + :param pulumi.Input[_builtins.str] region: Bucket region, for example `us-east-1`. + :param pulumi.Input[_builtins.str] secret_access_key: S3 secret access key. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] additional_flags: Extra flags passed to the underlying `rclone` invocation. + :param pulumi.Input[_builtins.str] name: Display name of the destination. + :param pulumi.Input[_builtins.str] provider_name: Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + :param pulumi.Input[_builtins.str] server_id: Server this destination is scoped to. + """ + pulumi.set(__self__, "access_key", access_key) + pulumi.set(__self__, "bucket", bucket) + pulumi.set(__self__, "endpoint", endpoint) + pulumi.set(__self__, "region", region) + pulumi.set(__self__, "secret_access_key", secret_access_key) + if additional_flags is not None: + pulumi.set(__self__, "additional_flags", additional_flags) + if name is not None: + pulumi.set(__self__, "name", name) + if provider_name is not None: + pulumi.set(__self__, "provider_name", provider_name) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + + @_builtins.property + @pulumi.getter(name="accessKey") + def access_key(self) -> pulumi.Input[_builtins.str]: + """ + S3 access key ID. + """ + return pulumi.get(self, "access_key") + + @access_key.setter + def access_key(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "access_key", value) + + @_builtins.property + @pulumi.getter + def bucket(self) -> pulumi.Input[_builtins.str]: + """ + Bucket name. + """ + return pulumi.get(self, "bucket") + + @bucket.setter + def bucket(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "bucket", value) + + @_builtins.property + @pulumi.getter + def endpoint(self) -> pulumi.Input[_builtins.str]: + """ + S3 endpoint URL. + """ + return pulumi.get(self, "endpoint") + + @endpoint.setter + def endpoint(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "endpoint", value) + + @_builtins.property + @pulumi.getter + def region(self) -> pulumi.Input[_builtins.str]: + """ + Bucket region, for example `us-east-1`. + """ + return pulumi.get(self, "region") + + @region.setter + def region(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "region", value) + + @_builtins.property + @pulumi.getter(name="secretAccessKey") + def secret_access_key(self) -> pulumi.Input[_builtins.str]: + """ + S3 secret access key. + """ + return pulumi.get(self, "secret_access_key") + + @secret_access_key.setter + def secret_access_key(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "secret_access_key", value) + + @_builtins.property + @pulumi.getter(name="additionalFlags") + def additional_flags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Extra flags passed to the underlying `rclone` invocation. + """ + return pulumi.get(self, "additional_flags") + + @additional_flags.setter + def additional_flags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "additional_flags", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the destination. + """ + 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="providerName") + def provider_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + """ + return pulumi.get(self, "provider_name") + + @provider_name.setter + def provider_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "provider_name", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server this destination is scoped to. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + +@pulumi.input_type +class _DestinationState: + def __init__(__self__, *, + access_key: Optional[pulumi.Input[_builtins.str]] = None, + additional_flags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + bucket: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + endpoint: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + provider_name: Optional[pulumi.Input[_builtins.str]] = None, + region: Optional[pulumi.Input[_builtins.str]] = None, + secret_access_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Destination resources. + + :param pulumi.Input[_builtins.str] access_key: S3 access key ID. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] additional_flags: Extra flags passed to the underlying `rclone` invocation. + :param pulumi.Input[_builtins.str] bucket: Bucket name. + :param pulumi.Input[_builtins.str] created_at: Timestamp of when the destination was created. + :param pulumi.Input[_builtins.str] endpoint: S3 endpoint URL. + :param pulumi.Input[_builtins.str] name: Display name of the destination. + :param pulumi.Input[_builtins.str] provider_name: Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + :param pulumi.Input[_builtins.str] region: Bucket region, for example `us-east-1`. + :param pulumi.Input[_builtins.str] secret_access_key: S3 secret access key. + :param pulumi.Input[_builtins.str] server_id: Server this destination is scoped to. + """ + if access_key is not None: + pulumi.set(__self__, "access_key", access_key) + if additional_flags is not None: + pulumi.set(__self__, "additional_flags", additional_flags) + if bucket is not None: + pulumi.set(__self__, "bucket", bucket) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if endpoint is not None: + pulumi.set(__self__, "endpoint", endpoint) + if name is not None: + pulumi.set(__self__, "name", name) + if provider_name is not None: + pulumi.set(__self__, "provider_name", provider_name) + if region is not None: + pulumi.set(__self__, "region", region) + if secret_access_key is not None: + pulumi.set(__self__, "secret_access_key", secret_access_key) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + + @_builtins.property + @pulumi.getter(name="accessKey") + def access_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + S3 access key ID. + """ + return pulumi.get(self, "access_key") + + @access_key.setter + def access_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "access_key", value) + + @_builtins.property + @pulumi.getter(name="additionalFlags") + def additional_flags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Extra flags passed to the underlying `rclone` invocation. + """ + return pulumi.get(self, "additional_flags") + + @additional_flags.setter + def additional_flags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "additional_flags", value) + + @_builtins.property + @pulumi.getter + def bucket(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bucket name. + """ + return pulumi.get(self, "bucket") + + @bucket.setter + def bucket(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bucket", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Timestamp of when the destination was created. + """ + 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 endpoint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + S3 endpoint URL. + """ + return pulumi.get(self, "endpoint") + + @endpoint.setter + def endpoint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the destination. + """ + 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="providerName") + def provider_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + """ + return pulumi.get(self, "provider_name") + + @provider_name.setter + def provider_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "provider_name", value) + + @_builtins.property + @pulumi.getter + def region(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bucket region, for example `us-east-1`. + """ + 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(name="secretAccessKey") + def secret_access_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + S3 secret access key. + """ + return pulumi.get(self, "secret_access_key") + + @secret_access_key.setter + def secret_access_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "secret_access_key", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server this destination is scoped to. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + +@pulumi.type_token("dokploy:index/destination:Destination") +class Destination(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + access_key: Optional[pulumi.Input[_builtins.str]] = None, + additional_flags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + bucket: Optional[pulumi.Input[_builtins.str]] = None, + endpoint: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + provider_name: Optional[pulumi.Input[_builtins.str]] = None, + region: Optional[pulumi.Input[_builtins.str]] = None, + secret_access_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Destination resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] access_key: S3 access key ID. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] additional_flags: Extra flags passed to the underlying `rclone` invocation. + :param pulumi.Input[_builtins.str] bucket: Bucket name. + :param pulumi.Input[_builtins.str] endpoint: S3 endpoint URL. + :param pulumi.Input[_builtins.str] name: Display name of the destination. + :param pulumi.Input[_builtins.str] provider_name: Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + :param pulumi.Input[_builtins.str] region: Bucket region, for example `us-east-1`. + :param pulumi.Input[_builtins.str] secret_access_key: S3 secret access key. + :param pulumi.Input[_builtins.str] server_id: Server this destination is scoped to. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: DestinationArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Destination resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param DestinationArgs 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(DestinationArgs, 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, + access_key: Optional[pulumi.Input[_builtins.str]] = None, + additional_flags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + bucket: Optional[pulumi.Input[_builtins.str]] = None, + endpoint: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + provider_name: Optional[pulumi.Input[_builtins.str]] = None, + region: Optional[pulumi.Input[_builtins.str]] = None, + secret_access_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_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__ = DestinationArgs.__new__(DestinationArgs) + + if access_key is None and not opts.urn: + raise TypeError("Missing required property 'access_key'") + __props__.__dict__["access_key"] = access_key + __props__.__dict__["additional_flags"] = additional_flags + if bucket is None and not opts.urn: + raise TypeError("Missing required property 'bucket'") + __props__.__dict__["bucket"] = bucket + if endpoint is None and not opts.urn: + raise TypeError("Missing required property 'endpoint'") + __props__.__dict__["endpoint"] = endpoint + __props__.__dict__["name"] = name + __props__.__dict__["provider_name"] = provider_name + if region is None and not opts.urn: + raise TypeError("Missing required property 'region'") + __props__.__dict__["region"] = region + if secret_access_key is None and not opts.urn: + raise TypeError("Missing required property 'secret_access_key'") + __props__.__dict__["secret_access_key"] = None if secret_access_key is None else pulumi.Output.secret(secret_access_key) + __props__.__dict__["server_id"] = server_id + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["secretAccessKey"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Destination, __self__).__init__( + 'dokploy:index/destination:Destination', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + access_key: Optional[pulumi.Input[_builtins.str]] = None, + additional_flags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + bucket: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + endpoint: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + provider_name: Optional[pulumi.Input[_builtins.str]] = None, + region: Optional[pulumi.Input[_builtins.str]] = None, + secret_access_key: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Destination': + """ + Get an existing Destination 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] access_key: S3 access key ID. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] additional_flags: Extra flags passed to the underlying `rclone` invocation. + :param pulumi.Input[_builtins.str] bucket: Bucket name. + :param pulumi.Input[_builtins.str] created_at: Timestamp of when the destination was created. + :param pulumi.Input[_builtins.str] endpoint: S3 endpoint URL. + :param pulumi.Input[_builtins.str] name: Display name of the destination. + :param pulumi.Input[_builtins.str] provider_name: Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + :param pulumi.Input[_builtins.str] region: Bucket region, for example `us-east-1`. + :param pulumi.Input[_builtins.str] secret_access_key: S3 secret access key. + :param pulumi.Input[_builtins.str] server_id: Server this destination is scoped to. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _DestinationState.__new__(_DestinationState) + + __props__.__dict__["access_key"] = access_key + __props__.__dict__["additional_flags"] = additional_flags + __props__.__dict__["bucket"] = bucket + __props__.__dict__["created_at"] = created_at + __props__.__dict__["endpoint"] = endpoint + __props__.__dict__["name"] = name + __props__.__dict__["provider_name"] = provider_name + __props__.__dict__["region"] = region + __props__.__dict__["secret_access_key"] = secret_access_key + __props__.__dict__["server_id"] = server_id + return Destination(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="accessKey") + def access_key(self) -> pulumi.Output[_builtins.str]: + """ + S3 access key ID. + """ + return pulumi.get(self, "access_key") + + @_builtins.property + @pulumi.getter(name="additionalFlags") + def additional_flags(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Extra flags passed to the underlying `rclone` invocation. + """ + return pulumi.get(self, "additional_flags") + + @_builtins.property + @pulumi.getter + def bucket(self) -> pulumi.Output[_builtins.str]: + """ + Bucket name. + """ + return pulumi.get(self, "bucket") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + Timestamp of when the destination was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def endpoint(self) -> pulumi.Output[_builtins.str]: + """ + S3 endpoint URL. + """ + return pulumi.get(self, "endpoint") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the destination. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="providerName") + def provider_name(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Provider label, for example `s3` or `cloudflare`. Named `provider_name` because `provider` is reserved by Terraform. + """ + return pulumi.get(self, "provider_name") + + @_builtins.property + @pulumi.getter + def region(self) -> pulumi.Output[_builtins.str]: + """ + Bucket region, for example `us-east-1`. + """ + return pulumi.get(self, "region") + + @_builtins.property + @pulumi.getter(name="secretAccessKey") + def secret_access_key(self) -> pulumi.Output[_builtins.str]: + """ + S3 secret access key. + """ + return pulumi.get(self, "secret_access_key") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Server this destination is scoped to. + """ + return pulumi.get(self, "server_id") + diff --git a/sdk/python/pulumi_dokploy/domain.py b/sdk/python/pulumi_dokploy/domain.py new file mode 100644 index 0000000..b3c5c6a --- /dev/null +++ b/sdk/python/pulumi_dokploy/domain.py @@ -0,0 +1,887 @@ +# 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__ = ['DomainArgs', 'Domain'] + +@pulumi.input_type +class DomainArgs: + def __init__(__self__, *, + host: pulumi.Input[_builtins.str], + application_id: Optional[pulumi.Input[_builtins.str]] = None, + certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + compose_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + custom_entrypoint: Optional[pulumi.Input[_builtins.str]] = None, + domain_type: Optional[pulumi.Input[_builtins.str]] = None, + forward_auth_enabled: Optional[pulumi.Input[_builtins.bool]] = None, + https: Optional[pulumi.Input[_builtins.bool]] = None, + internal_path: Optional[pulumi.Input[_builtins.str]] = None, + middlewares: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + preview_deployment_id: Optional[pulumi.Input[_builtins.str]] = None, + service_name: Optional[pulumi.Input[_builtins.str]] = None, + strip_path: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a Domain resource. + + :param pulumi.Input[_builtins.str] host: Fully-qualified hostname, for example `api.example.com`. + :param pulumi.Input[_builtins.str] application_id: Application this domain routes to. + :param pulumi.Input[_builtins.str] certificate_type: How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] compose_id: Compose stack this domain routes to. + :param pulumi.Input[_builtins.str] custom_cert_resolver: Traefik certificate resolver name, when `certificate_type` is `custom`. + :param pulumi.Input[_builtins.str] custom_entrypoint: Traefik entrypoint to bind, when not using the defaults. + :param pulumi.Input[_builtins.str] domain_type: What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + :param pulumi.Input[_builtins.bool] forward_auth_enabled: Protect this domain with Dokploy's forward auth. + :param pulumi.Input[_builtins.bool] https: Serve the domain over HTTPS and redirect HTTP traffic to it. + :param pulumi.Input[_builtins.str] internal_path: Path the request is rewritten to before it reaches the container, defaults to `/`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] middlewares: Names of Traefik middlewares to apply. + :param pulumi.Input[_builtins.str] path: Path prefix this domain routes, defaults to `/`. + :param pulumi.Input[_builtins.int] port: Container port that receives the traffic, defaults to `3000`. + :param pulumi.Input[_builtins.str] preview_deployment_id: Preview deployment this domain routes to. + :param pulumi.Input[_builtins.str] service_name: Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + :param pulumi.Input[_builtins.bool] strip_path: Strip `path` from the request before forwarding it. + """ + pulumi.set(__self__, "host", host) + if application_id is not None: + pulumi.set(__self__, "application_id", application_id) + if certificate_type is not None: + pulumi.set(__self__, "certificate_type", certificate_type) + if compose_id is not None: + pulumi.set(__self__, "compose_id", compose_id) + if custom_cert_resolver is not None: + pulumi.set(__self__, "custom_cert_resolver", custom_cert_resolver) + if custom_entrypoint is not None: + pulumi.set(__self__, "custom_entrypoint", custom_entrypoint) + if domain_type is not None: + pulumi.set(__self__, "domain_type", domain_type) + if forward_auth_enabled is not None: + pulumi.set(__self__, "forward_auth_enabled", forward_auth_enabled) + if https is not None: + pulumi.set(__self__, "https", https) + if internal_path is not None: + pulumi.set(__self__, "internal_path", internal_path) + if middlewares is not None: + pulumi.set(__self__, "middlewares", middlewares) + if path is not None: + pulumi.set(__self__, "path", path) + if port is not None: + pulumi.set(__self__, "port", port) + if preview_deployment_id is not None: + pulumi.set(__self__, "preview_deployment_id", preview_deployment_id) + if service_name is not None: + pulumi.set(__self__, "service_name", service_name) + if strip_path is not None: + pulumi.set(__self__, "strip_path", strip_path) + + @_builtins.property + @pulumi.getter + def host(self) -> pulumi.Input[_builtins.str]: + """ + Fully-qualified hostname, for example `api.example.com`. + """ + return pulumi.get(self, "host") + + @host.setter + def host(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "host", value) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Application this domain routes to. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter(name="certificateType") + def certificate_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + """ + return pulumi.get(self, "certificate_type") + + @certificate_type.setter + def certificate_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "certificate_type", value) + + @_builtins.property + @pulumi.getter(name="composeId") + def compose_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Compose stack this domain routes to. + """ + return pulumi.get(self, "compose_id") + + @compose_id.setter + def compose_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_id", value) + + @_builtins.property + @pulumi.getter(name="customCertResolver") + def custom_cert_resolver(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Traefik certificate resolver name, when `certificate_type` is `custom`. + """ + return pulumi.get(self, "custom_cert_resolver") + + @custom_cert_resolver.setter + def custom_cert_resolver(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_cert_resolver", value) + + @_builtins.property + @pulumi.getter(name="customEntrypoint") + def custom_entrypoint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Traefik entrypoint to bind, when not using the defaults. + """ + return pulumi.get(self, "custom_entrypoint") + + @custom_entrypoint.setter + def custom_entrypoint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_entrypoint", value) + + @_builtins.property + @pulumi.getter(name="domainType") + def domain_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + """ + return pulumi.get(self, "domain_type") + + @domain_type.setter + def domain_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "domain_type", value) + + @_builtins.property + @pulumi.getter(name="forwardAuthEnabled") + def forward_auth_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Protect this domain with Dokploy's forward auth. + """ + return pulumi.get(self, "forward_auth_enabled") + + @forward_auth_enabled.setter + def forward_auth_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "forward_auth_enabled", value) + + @_builtins.property + @pulumi.getter + def https(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Serve the domain over HTTPS and redirect HTTP traffic to it. + """ + return pulumi.get(self, "https") + + @https.setter + def https(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "https", value) + + @_builtins.property + @pulumi.getter(name="internalPath") + def internal_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path the request is rewritten to before it reaches the container, defaults to `/`. + """ + return pulumi.get(self, "internal_path") + + @internal_path.setter + def internal_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "internal_path", value) + + @_builtins.property + @pulumi.getter + def middlewares(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Names of Traefik middlewares to apply. + """ + return pulumi.get(self, "middlewares") + + @middlewares.setter + def middlewares(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "middlewares", value) + + @_builtins.property + @pulumi.getter + def path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path prefix this domain routes, defaults to `/`. + """ + return pulumi.get(self, "path") + + @path.setter + def path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "path", value) + + @_builtins.property + @pulumi.getter + def port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Container port that receives the traffic, defaults to `3000`. + """ + return pulumi.get(self, "port") + + @port.setter + def port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "port", value) + + @_builtins.property + @pulumi.getter(name="previewDeploymentId") + def preview_deployment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Preview deployment this domain routes to. + """ + return pulumi.get(self, "preview_deployment_id") + + @preview_deployment_id.setter + def preview_deployment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_deployment_id", value) + + @_builtins.property + @pulumi.getter(name="serviceName") + def service_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + """ + return pulumi.get(self, "service_name") + + @service_name.setter + def service_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "service_name", value) + + @_builtins.property + @pulumi.getter(name="stripPath") + def strip_path(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Strip `path` from the request before forwarding it. + """ + return pulumi.get(self, "strip_path") + + @strip_path.setter + def strip_path(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "strip_path", value) + + +@pulumi.input_type +class _DomainState: + def __init__(__self__, *, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + compose_id: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + custom_entrypoint: Optional[pulumi.Input[_builtins.str]] = None, + domain_type: Optional[pulumi.Input[_builtins.str]] = None, + forward_auth_enabled: Optional[pulumi.Input[_builtins.bool]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + https: Optional[pulumi.Input[_builtins.bool]] = None, + internal_path: Optional[pulumi.Input[_builtins.str]] = None, + middlewares: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + preview_deployment_id: Optional[pulumi.Input[_builtins.str]] = None, + service_name: Optional[pulumi.Input[_builtins.str]] = None, + strip_path: Optional[pulumi.Input[_builtins.bool]] = None): + """ + Input properties used for looking up and filtering Domain resources. + + :param pulumi.Input[_builtins.str] application_id: Application this domain routes to. + :param pulumi.Input[_builtins.str] certificate_type: How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] compose_id: Compose stack this domain routes to. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the domain was created. + :param pulumi.Input[_builtins.str] custom_cert_resolver: Traefik certificate resolver name, when `certificate_type` is `custom`. + :param pulumi.Input[_builtins.str] custom_entrypoint: Traefik entrypoint to bind, when not using the defaults. + :param pulumi.Input[_builtins.str] domain_type: What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + :param pulumi.Input[_builtins.bool] forward_auth_enabled: Protect this domain with Dokploy's forward auth. + :param pulumi.Input[_builtins.str] host: Fully-qualified hostname, for example `api.example.com`. + :param pulumi.Input[_builtins.bool] https: Serve the domain over HTTPS and redirect HTTP traffic to it. + :param pulumi.Input[_builtins.str] internal_path: Path the request is rewritten to before it reaches the container, defaults to `/`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] middlewares: Names of Traefik middlewares to apply. + :param pulumi.Input[_builtins.str] path: Path prefix this domain routes, defaults to `/`. + :param pulumi.Input[_builtins.int] port: Container port that receives the traffic, defaults to `3000`. + :param pulumi.Input[_builtins.str] preview_deployment_id: Preview deployment this domain routes to. + :param pulumi.Input[_builtins.str] service_name: Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + :param pulumi.Input[_builtins.bool] strip_path: Strip `path` from the request before forwarding it. + """ + if application_id is not None: + pulumi.set(__self__, "application_id", application_id) + if certificate_type is not None: + pulumi.set(__self__, "certificate_type", certificate_type) + if compose_id is not None: + pulumi.set(__self__, "compose_id", compose_id) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if custom_cert_resolver is not None: + pulumi.set(__self__, "custom_cert_resolver", custom_cert_resolver) + if custom_entrypoint is not None: + pulumi.set(__self__, "custom_entrypoint", custom_entrypoint) + if domain_type is not None: + pulumi.set(__self__, "domain_type", domain_type) + if forward_auth_enabled is not None: + pulumi.set(__self__, "forward_auth_enabled", forward_auth_enabled) + if host is not None: + pulumi.set(__self__, "host", host) + if https is not None: + pulumi.set(__self__, "https", https) + if internal_path is not None: + pulumi.set(__self__, "internal_path", internal_path) + if middlewares is not None: + pulumi.set(__self__, "middlewares", middlewares) + if path is not None: + pulumi.set(__self__, "path", path) + if port is not None: + pulumi.set(__self__, "port", port) + if preview_deployment_id is not None: + pulumi.set(__self__, "preview_deployment_id", preview_deployment_id) + if service_name is not None: + pulumi.set(__self__, "service_name", service_name) + if strip_path is not None: + pulumi.set(__self__, "strip_path", strip_path) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Application this domain routes to. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter(name="certificateType") + def certificate_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + """ + return pulumi.get(self, "certificate_type") + + @certificate_type.setter + def certificate_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "certificate_type", value) + + @_builtins.property + @pulumi.getter(name="composeId") + def compose_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Compose stack this domain routes to. + """ + return pulumi.get(self, "compose_id") + + @compose_id.setter + def compose_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "compose_id", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the domain was created. + """ + 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(name="customCertResolver") + def custom_cert_resolver(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Traefik certificate resolver name, when `certificate_type` is `custom`. + """ + return pulumi.get(self, "custom_cert_resolver") + + @custom_cert_resolver.setter + def custom_cert_resolver(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_cert_resolver", value) + + @_builtins.property + @pulumi.getter(name="customEntrypoint") + def custom_entrypoint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Traefik entrypoint to bind, when not using the defaults. + """ + return pulumi.get(self, "custom_entrypoint") + + @custom_entrypoint.setter + def custom_entrypoint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "custom_entrypoint", value) + + @_builtins.property + @pulumi.getter(name="domainType") + def domain_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + """ + return pulumi.get(self, "domain_type") + + @domain_type.setter + def domain_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "domain_type", value) + + @_builtins.property + @pulumi.getter(name="forwardAuthEnabled") + def forward_auth_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Protect this domain with Dokploy's forward auth. + """ + return pulumi.get(self, "forward_auth_enabled") + + @forward_auth_enabled.setter + def forward_auth_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "forward_auth_enabled", value) + + @_builtins.property + @pulumi.getter + def host(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Fully-qualified hostname, for example `api.example.com`. + """ + return pulumi.get(self, "host") + + @host.setter + def host(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "host", value) + + @_builtins.property + @pulumi.getter + def https(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Serve the domain over HTTPS and redirect HTTP traffic to it. + """ + return pulumi.get(self, "https") + + @https.setter + def https(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "https", value) + + @_builtins.property + @pulumi.getter(name="internalPath") + def internal_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path the request is rewritten to before it reaches the container, defaults to `/`. + """ + return pulumi.get(self, "internal_path") + + @internal_path.setter + def internal_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "internal_path", value) + + @_builtins.property + @pulumi.getter + def middlewares(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Names of Traefik middlewares to apply. + """ + return pulumi.get(self, "middlewares") + + @middlewares.setter + def middlewares(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "middlewares", value) + + @_builtins.property + @pulumi.getter + def path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path prefix this domain routes, defaults to `/`. + """ + return pulumi.get(self, "path") + + @path.setter + def path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "path", value) + + @_builtins.property + @pulumi.getter + def port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Container port that receives the traffic, defaults to `3000`. + """ + return pulumi.get(self, "port") + + @port.setter + def port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "port", value) + + @_builtins.property + @pulumi.getter(name="previewDeploymentId") + def preview_deployment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Preview deployment this domain routes to. + """ + return pulumi.get(self, "preview_deployment_id") + + @preview_deployment_id.setter + def preview_deployment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preview_deployment_id", value) + + @_builtins.property + @pulumi.getter(name="serviceName") + def service_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + """ + return pulumi.get(self, "service_name") + + @service_name.setter + def service_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "service_name", value) + + @_builtins.property + @pulumi.getter(name="stripPath") + def strip_path(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Strip `path` from the request before forwarding it. + """ + return pulumi.get(self, "strip_path") + + @strip_path.setter + def strip_path(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "strip_path", value) + + +@pulumi.type_token("dokploy:index/domain:Domain") +class Domain(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + compose_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + custom_entrypoint: Optional[pulumi.Input[_builtins.str]] = None, + domain_type: Optional[pulumi.Input[_builtins.str]] = None, + forward_auth_enabled: Optional[pulumi.Input[_builtins.bool]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + https: Optional[pulumi.Input[_builtins.bool]] = None, + internal_path: Optional[pulumi.Input[_builtins.str]] = None, + middlewares: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + preview_deployment_id: Optional[pulumi.Input[_builtins.str]] = None, + service_name: Optional[pulumi.Input[_builtins.str]] = None, + strip_path: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + """ + Create a Domain resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] application_id: Application this domain routes to. + :param pulumi.Input[_builtins.str] certificate_type: How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] compose_id: Compose stack this domain routes to. + :param pulumi.Input[_builtins.str] custom_cert_resolver: Traefik certificate resolver name, when `certificate_type` is `custom`. + :param pulumi.Input[_builtins.str] custom_entrypoint: Traefik entrypoint to bind, when not using the defaults. + :param pulumi.Input[_builtins.str] domain_type: What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + :param pulumi.Input[_builtins.bool] forward_auth_enabled: Protect this domain with Dokploy's forward auth. + :param pulumi.Input[_builtins.str] host: Fully-qualified hostname, for example `api.example.com`. + :param pulumi.Input[_builtins.bool] https: Serve the domain over HTTPS and redirect HTTP traffic to it. + :param pulumi.Input[_builtins.str] internal_path: Path the request is rewritten to before it reaches the container, defaults to `/`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] middlewares: Names of Traefik middlewares to apply. + :param pulumi.Input[_builtins.str] path: Path prefix this domain routes, defaults to `/`. + :param pulumi.Input[_builtins.int] port: Container port that receives the traffic, defaults to `3000`. + :param pulumi.Input[_builtins.str] preview_deployment_id: Preview deployment this domain routes to. + :param pulumi.Input[_builtins.str] service_name: Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + :param pulumi.Input[_builtins.bool] strip_path: Strip `path` from the request before forwarding it. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: DomainArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Domain resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param DomainArgs 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(DomainArgs, 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, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + compose_id: Optional[pulumi.Input[_builtins.str]] = None, + custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + custom_entrypoint: Optional[pulumi.Input[_builtins.str]] = None, + domain_type: Optional[pulumi.Input[_builtins.str]] = None, + forward_auth_enabled: Optional[pulumi.Input[_builtins.bool]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + https: Optional[pulumi.Input[_builtins.bool]] = None, + internal_path: Optional[pulumi.Input[_builtins.str]] = None, + middlewares: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + preview_deployment_id: Optional[pulumi.Input[_builtins.str]] = None, + service_name: Optional[pulumi.Input[_builtins.str]] = None, + strip_path: Optional[pulumi.Input[_builtins.bool]] = 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__ = DomainArgs.__new__(DomainArgs) + + __props__.__dict__["application_id"] = application_id + __props__.__dict__["certificate_type"] = certificate_type + __props__.__dict__["compose_id"] = compose_id + __props__.__dict__["custom_cert_resolver"] = custom_cert_resolver + __props__.__dict__["custom_entrypoint"] = custom_entrypoint + __props__.__dict__["domain_type"] = domain_type + __props__.__dict__["forward_auth_enabled"] = forward_auth_enabled + if host is None and not opts.urn: + raise TypeError("Missing required property 'host'") + __props__.__dict__["host"] = host + __props__.__dict__["https"] = https + __props__.__dict__["internal_path"] = internal_path + __props__.__dict__["middlewares"] = middlewares + __props__.__dict__["path"] = path + __props__.__dict__["port"] = port + __props__.__dict__["preview_deployment_id"] = preview_deployment_id + __props__.__dict__["service_name"] = service_name + __props__.__dict__["strip_path"] = strip_path + __props__.__dict__["created_at"] = None + super(Domain, __self__).__init__( + 'dokploy:index/domain:Domain', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + certificate_type: Optional[pulumi.Input[_builtins.str]] = None, + compose_id: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + custom_cert_resolver: Optional[pulumi.Input[_builtins.str]] = None, + custom_entrypoint: Optional[pulumi.Input[_builtins.str]] = None, + domain_type: Optional[pulumi.Input[_builtins.str]] = None, + forward_auth_enabled: Optional[pulumi.Input[_builtins.bool]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + https: Optional[pulumi.Input[_builtins.bool]] = None, + internal_path: Optional[pulumi.Input[_builtins.str]] = None, + middlewares: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + preview_deployment_id: Optional[pulumi.Input[_builtins.str]] = None, + service_name: Optional[pulumi.Input[_builtins.str]] = None, + strip_path: Optional[pulumi.Input[_builtins.bool]] = None) -> 'Domain': + """ + Get an existing Domain 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] application_id: Application this domain routes to. + :param pulumi.Input[_builtins.str] certificate_type: How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + :param pulumi.Input[_builtins.str] compose_id: Compose stack this domain routes to. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the domain was created. + :param pulumi.Input[_builtins.str] custom_cert_resolver: Traefik certificate resolver name, when `certificate_type` is `custom`. + :param pulumi.Input[_builtins.str] custom_entrypoint: Traefik entrypoint to bind, when not using the defaults. + :param pulumi.Input[_builtins.str] domain_type: What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + :param pulumi.Input[_builtins.bool] forward_auth_enabled: Protect this domain with Dokploy's forward auth. + :param pulumi.Input[_builtins.str] host: Fully-qualified hostname, for example `api.example.com`. + :param pulumi.Input[_builtins.bool] https: Serve the domain over HTTPS and redirect HTTP traffic to it. + :param pulumi.Input[_builtins.str] internal_path: Path the request is rewritten to before it reaches the container, defaults to `/`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] middlewares: Names of Traefik middlewares to apply. + :param pulumi.Input[_builtins.str] path: Path prefix this domain routes, defaults to `/`. + :param pulumi.Input[_builtins.int] port: Container port that receives the traffic, defaults to `3000`. + :param pulumi.Input[_builtins.str] preview_deployment_id: Preview deployment this domain routes to. + :param pulumi.Input[_builtins.str] service_name: Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + :param pulumi.Input[_builtins.bool] strip_path: Strip `path` from the request before forwarding it. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _DomainState.__new__(_DomainState) + + __props__.__dict__["application_id"] = application_id + __props__.__dict__["certificate_type"] = certificate_type + __props__.__dict__["compose_id"] = compose_id + __props__.__dict__["created_at"] = created_at + __props__.__dict__["custom_cert_resolver"] = custom_cert_resolver + __props__.__dict__["custom_entrypoint"] = custom_entrypoint + __props__.__dict__["domain_type"] = domain_type + __props__.__dict__["forward_auth_enabled"] = forward_auth_enabled + __props__.__dict__["host"] = host + __props__.__dict__["https"] = https + __props__.__dict__["internal_path"] = internal_path + __props__.__dict__["middlewares"] = middlewares + __props__.__dict__["path"] = path + __props__.__dict__["port"] = port + __props__.__dict__["preview_deployment_id"] = preview_deployment_id + __props__.__dict__["service_name"] = service_name + __props__.__dict__["strip_path"] = strip_path + return Domain(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Application this domain routes to. + """ + return pulumi.get(self, "application_id") + + @_builtins.property + @pulumi.getter(name="certificateType") + def certificate_type(self) -> pulumi.Output[_builtins.str]: + """ + How TLS certificates are obtained. Use `letsencrypt` for automatic certificates. Valid values: `letsencrypt`, `none`, `custom`. + """ + return pulumi.get(self, "certificate_type") + + @_builtins.property + @pulumi.getter(name="composeId") + def compose_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Compose stack this domain routes to. + """ + return pulumi.get(self, "compose_id") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the domain was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="customCertResolver") + def custom_cert_resolver(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Traefik certificate resolver name, when `certificate_type` is `custom`. + """ + return pulumi.get(self, "custom_cert_resolver") + + @_builtins.property + @pulumi.getter(name="customEntrypoint") + def custom_entrypoint(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Traefik entrypoint to bind, when not using the defaults. + """ + return pulumi.get(self, "custom_entrypoint") + + @_builtins.property + @pulumi.getter(name="domainType") + def domain_type(self) -> pulumi.Output[_builtins.str]: + """ + What kind of target this domain points at. Valid values: `compose`, `application`, `preview`. + """ + return pulumi.get(self, "domain_type") + + @_builtins.property + @pulumi.getter(name="forwardAuthEnabled") + def forward_auth_enabled(self) -> pulumi.Output[_builtins.bool]: + """ + Protect this domain with Dokploy's forward auth. + """ + return pulumi.get(self, "forward_auth_enabled") + + @_builtins.property + @pulumi.getter + def host(self) -> pulumi.Output[_builtins.str]: + """ + Fully-qualified hostname, for example `api.example.com`. + """ + return pulumi.get(self, "host") + + @_builtins.property + @pulumi.getter + def https(self) -> pulumi.Output[_builtins.bool]: + """ + Serve the domain over HTTPS and redirect HTTP traffic to it. + """ + return pulumi.get(self, "https") + + @_builtins.property + @pulumi.getter(name="internalPath") + def internal_path(self) -> pulumi.Output[_builtins.str]: + """ + Path the request is rewritten to before it reaches the container, defaults to `/`. + """ + return pulumi.get(self, "internal_path") + + @_builtins.property + @pulumi.getter + def middlewares(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Names of Traefik middlewares to apply. + """ + return pulumi.get(self, "middlewares") + + @_builtins.property + @pulumi.getter + def path(self) -> pulumi.Output[_builtins.str]: + """ + Path prefix this domain routes, defaults to `/`. + """ + return pulumi.get(self, "path") + + @_builtins.property + @pulumi.getter + def port(self) -> pulumi.Output[_builtins.int]: + """ + Container port that receives the traffic, defaults to `3000`. + """ + return pulumi.get(self, "port") + + @_builtins.property + @pulumi.getter(name="previewDeploymentId") + def preview_deployment_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Preview deployment this domain routes to. + """ + return pulumi.get(self, "preview_deployment_id") + + @_builtins.property + @pulumi.getter(name="serviceName") + def service_name(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Name of the service inside a Compose stack that receives the traffic. Required when `compose_id` is set. + """ + return pulumi.get(self, "service_name") + + @_builtins.property + @pulumi.getter(name="stripPath") + def strip_path(self) -> pulumi.Output[_builtins.bool]: + """ + Strip `path` from the request before forwarding it. + """ + return pulumi.get(self, "strip_path") + diff --git a/sdk/python/pulumi_dokploy/environment.py b/sdk/python/pulumi_dokploy/environment.py new file mode 100644 index 0000000..c460ad8 --- /dev/null +++ b/sdk/python/pulumi_dokploy/environment.py @@ -0,0 +1,351 @@ +# 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__ = ['EnvironmentArgs', 'Environment'] + +@pulumi.input_type +class EnvironmentArgs: + def __init__(__self__, *, + project_id: pulumi.Input[_builtins.str], + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Environment resource. + + :param pulumi.Input[_builtins.str] project_id: Project this environment belongs to. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + :param pulumi.Input[_builtins.str] name: Environment name, for example `staging`. + """ + pulumi.set(__self__, "project_id", project_id) + if description is not None: + pulumi.set(__self__, "description", description) + if env is not None: + pulumi.set(__self__, "env", env) + if name is not None: + pulumi.set(__self__, "name", name) + + @_builtins.property + @pulumi.getter(name="projectId") + def project_id(self) -> pulumi.Input[_builtins.str]: + """ + Project this environment belongs to. + """ + return pulumi.get(self, "project_id") + + @project_id.setter + def project_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "project_id", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment name, for example `staging`. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _EnvironmentState: + def __init__(__self__, *, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + is_default: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + project_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Environment resources. + + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the environment was created. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + :param pulumi.Input[_builtins.bool] is_default: Whether this is the project's default environment. + :param pulumi.Input[_builtins.str] name: Environment name, for example `staging`. + :param pulumi.Input[_builtins.str] project_id: Project this environment belongs to. + """ + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if description is not None: + pulumi.set(__self__, "description", description) + if env is not None: + pulumi.set(__self__, "env", env) + if is_default is not None: + pulumi.set(__self__, "is_default", is_default) + if name is not None: + pulumi.set(__self__, "name", name) + if project_id is not None: + pulumi.set(__self__, "project_id", project_id) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the environment was created. + """ + 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 description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="isDefault") + def is_default(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether this is the project's default environment. + """ + return pulumi.get(self, "is_default") + + @is_default.setter + def is_default(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "is_default", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment name, for example `staging`. + """ + 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="projectId") + def project_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Project this environment belongs to. + """ + 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) + + +@pulumi.type_token("dokploy:index/environment:Environment") +class Environment(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + project_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Environment resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + :param pulumi.Input[_builtins.str] name: Environment name, for example `staging`. + :param pulumi.Input[_builtins.str] project_id: Project this environment belongs to. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: EnvironmentArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Environment resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param EnvironmentArgs 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(EnvironmentArgs, 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, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + project_id: Optional[pulumi.Input[_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__ = EnvironmentArgs.__new__(EnvironmentArgs) + + __props__.__dict__["description"] = description + __props__.__dict__["env"] = env + __props__.__dict__["name"] = name + if project_id is None and not opts.urn: + raise TypeError("Missing required property 'project_id'") + __props__.__dict__["project_id"] = project_id + __props__.__dict__["created_at"] = None + __props__.__dict__["is_default"] = None + super(Environment, __self__).__init__( + 'dokploy:index/environment:Environment', + 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, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + is_default: Optional[pulumi.Input[_builtins.bool]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + project_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Environment': + """ + Get an existing Environment 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: RFC 3339 timestamp of when the environment was created. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + :param pulumi.Input[_builtins.bool] is_default: Whether this is the project's default environment. + :param pulumi.Input[_builtins.str] name: Environment name, for example `staging`. + :param pulumi.Input[_builtins.str] project_id: Project this environment belongs to. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _EnvironmentState.__new__(_EnvironmentState) + + __props__.__dict__["created_at"] = created_at + __props__.__dict__["description"] = description + __props__.__dict__["env"] = env + __props__.__dict__["is_default"] = is_default + __props__.__dict__["name"] = name + __props__.__dict__["project_id"] = project_id + return Environment(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the environment was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[_builtins.str]: + """ + Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="isDefault") + def is_default(self) -> pulumi.Output[_builtins.bool]: + """ + Whether this is the project's default environment. + """ + return pulumi.get(self, "is_default") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Environment name, for example `staging`. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="projectId") + def project_id(self) -> pulumi.Output[_builtins.str]: + """ + Project this environment belongs to. + """ + return pulumi.get(self, "project_id") + diff --git a/sdk/python/pulumi_dokploy/get_application.py b/sdk/python/pulumi_dokploy/get_application.py new file mode 100644 index 0000000..1a55b77 --- /dev/null +++ b/sdk/python/pulumi_dokploy/get_application.py @@ -0,0 +1,159 @@ +# 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__ = [ + 'GetApplicationResult', + 'AwaitableGetApplicationResult', + 'get_application', + 'get_application_output', +] + +@pulumi.output_type +class GetApplicationResult: + """ + A collection of values returned by getApplication. + """ + def __init__(__self__, app_name=None, application_status=None, build_type=None, created_at=None, description=None, environment_id=None, id=None, name=None, source_type=None): + if app_name and not isinstance(app_name, str): + raise TypeError("Expected argument 'app_name' to be a str") + pulumi.set(__self__, "app_name", app_name) + if application_status and not isinstance(application_status, str): + raise TypeError("Expected argument 'application_status' to be a str") + pulumi.set(__self__, "application_status", application_status) + if build_type and not isinstance(build_type, str): + raise TypeError("Expected argument 'build_type' to be a str") + pulumi.set(__self__, "build_type", build_type) + if created_at and not isinstance(created_at, str): + raise TypeError("Expected argument 'created_at' to be a str") + pulumi.set(__self__, "created_at", created_at) + if description and not isinstance(description, str): + raise TypeError("Expected argument 'description' to be a str") + pulumi.set(__self__, "description", description) + if environment_id and not isinstance(environment_id, str): + raise TypeError("Expected argument 'environment_id' to be a str") + pulumi.set(__self__, "environment_id", environment_id) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if source_type and not isinstance(source_type, str): + raise TypeError("Expected argument 'source_type' to be a str") + pulumi.set(__self__, "source_type", source_type) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> _builtins.str: + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> _builtins.str: + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter(name="buildType") + def build_type(self) -> _builtins.str: + return pulumi.get(self, "build_type") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> _builtins.str: + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def description(self) -> _builtins.str: + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> _builtins.str: + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter + def name(self) -> _builtins.str: + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="sourceType") + def source_type(self) -> _builtins.str: + return pulumi.get(self, "source_type") + + +class AwaitableGetApplicationResult(GetApplicationResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetApplicationResult( + app_name=self.app_name, + application_status=self.application_status, + build_type=self.build_type, + created_at=self.created_at, + description=self.description, + environment_id=self.environment_id, + id=self.id, + name=self.name, + source_type=self.source_type) + + +def get_application(id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetApplicationResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('dokploy:index/getApplication:getApplication', __args__, opts=opts, typ=GetApplicationResult).value + + return AwaitableGetApplicationResult( + app_name=pulumi.get(__ret__, 'app_name'), + application_status=pulumi.get(__ret__, 'application_status'), + build_type=pulumi.get(__ret__, 'build_type'), + created_at=pulumi.get(__ret__, 'created_at'), + description=pulumi.get(__ret__, 'description'), + environment_id=pulumi.get(__ret__, 'environment_id'), + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + source_type=pulumi.get(__ret__, 'source_type')) +def get_application_output(id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetApplicationResult]: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('dokploy:index/getApplication:getApplication', __args__, opts=opts, typ=GetApplicationResult) + return __ret__.apply(lambda __response__: GetApplicationResult( + app_name=pulumi.get(__response__, 'app_name'), + application_status=pulumi.get(__response__, 'application_status'), + build_type=pulumi.get(__response__, 'build_type'), + created_at=pulumi.get(__response__, 'created_at'), + description=pulumi.get(__response__, 'description'), + environment_id=pulumi.get(__response__, 'environment_id'), + id=pulumi.get(__response__, 'id'), + name=pulumi.get(__response__, 'name'), + source_type=pulumi.get(__response__, 'source_type'))) diff --git a/sdk/python/pulumi_dokploy/get_environment.py b/sdk/python/pulumi_dokploy/get_environment.py new file mode 100644 index 0000000..c8d8de1 --- /dev/null +++ b/sdk/python/pulumi_dokploy/get_environment.py @@ -0,0 +1,137 @@ +# 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__ = [ + 'GetEnvironmentResult', + 'AwaitableGetEnvironmentResult', + 'get_environment', + 'get_environment_output', +] + +@pulumi.output_type +class GetEnvironmentResult: + """ + A collection of values returned by getEnvironment. + """ + def __init__(__self__, created_at=None, description=None, env=None, id=None, is_default=None, name=None, project_id=None): + if created_at and not isinstance(created_at, str): + raise TypeError("Expected argument 'created_at' to be a str") + pulumi.set(__self__, "created_at", created_at) + if description and not isinstance(description, str): + raise TypeError("Expected argument 'description' to be a str") + pulumi.set(__self__, "description", description) + if env and not isinstance(env, str): + raise TypeError("Expected argument 'env' to be a str") + pulumi.set(__self__, "env", env) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if is_default and not isinstance(is_default, bool): + raise TypeError("Expected argument 'is_default' to be a bool") + pulumi.set(__self__, "is_default", is_default) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if project_id and not isinstance(project_id, str): + raise TypeError("Expected argument 'project_id' to be a str") + pulumi.set(__self__, "project_id", project_id) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> _builtins.str: + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def description(self) -> _builtins.str: + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter + def env(self) -> _builtins.str: + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="isDefault") + def is_default(self) -> _builtins.bool: + return pulumi.get(self, "is_default") + + @_builtins.property + @pulumi.getter + def name(self) -> _builtins.str: + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="projectId") + def project_id(self) -> _builtins.str: + return pulumi.get(self, "project_id") + + +class AwaitableGetEnvironmentResult(GetEnvironmentResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetEnvironmentResult( + created_at=self.created_at, + description=self.description, + env=self.env, + id=self.id, + is_default=self.is_default, + name=self.name, + project_id=self.project_id) + + +def get_environment(id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetEnvironmentResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('dokploy:index/getEnvironment:getEnvironment', __args__, opts=opts, typ=GetEnvironmentResult).value + + return AwaitableGetEnvironmentResult( + created_at=pulumi.get(__ret__, 'created_at'), + description=pulumi.get(__ret__, 'description'), + env=pulumi.get(__ret__, 'env'), + id=pulumi.get(__ret__, 'id'), + is_default=pulumi.get(__ret__, 'is_default'), + name=pulumi.get(__ret__, 'name'), + project_id=pulumi.get(__ret__, 'project_id')) +def get_environment_output(id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetEnvironmentResult]: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('dokploy:index/getEnvironment:getEnvironment', __args__, opts=opts, typ=GetEnvironmentResult) + return __ret__.apply(lambda __response__: GetEnvironmentResult( + created_at=pulumi.get(__response__, 'created_at'), + description=pulumi.get(__response__, 'description'), + env=pulumi.get(__response__, 'env'), + id=pulumi.get(__response__, 'id'), + is_default=pulumi.get(__response__, 'is_default'), + name=pulumi.get(__response__, 'name'), + project_id=pulumi.get(__response__, 'project_id'))) diff --git a/sdk/python/pulumi_dokploy/get_project.py b/sdk/python/pulumi_dokploy/get_project.py new file mode 100644 index 0000000..5af8121 --- /dev/null +++ b/sdk/python/pulumi_dokploy/get_project.py @@ -0,0 +1,149 @@ +# 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 + +__all__ = [ + 'GetProjectResult', + 'AwaitableGetProjectResult', + 'get_project', + 'get_project_output', +] + +@pulumi.output_type +class GetProjectResult: + """ + A collection of values returned by getProject. + """ + def __init__(__self__, created_at=None, default_environment_id=None, description=None, env=None, environments=None, id=None, name=None, organization_id=None): + if created_at and not isinstance(created_at, str): + raise TypeError("Expected argument 'created_at' to be a str") + pulumi.set(__self__, "created_at", created_at) + if default_environment_id and not isinstance(default_environment_id, str): + raise TypeError("Expected argument 'default_environment_id' to be a str") + pulumi.set(__self__, "default_environment_id", default_environment_id) + if description and not isinstance(description, str): + raise TypeError("Expected argument 'description' to be a str") + pulumi.set(__self__, "description", description) + if env and not isinstance(env, str): + raise TypeError("Expected argument 'env' to be a str") + pulumi.set(__self__, "env", env) + if environments and not isinstance(environments, list): + raise TypeError("Expected argument 'environments' to be a list") + pulumi.set(__self__, "environments", environments) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if organization_id and not isinstance(organization_id, str): + raise TypeError("Expected argument 'organization_id' to be a str") + pulumi.set(__self__, "organization_id", organization_id) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> _builtins.str: + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="defaultEnvironmentId") + def default_environment_id(self) -> _builtins.str: + return pulumi.get(self, "default_environment_id") + + @_builtins.property + @pulumi.getter + def description(self) -> _builtins.str: + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter + def env(self) -> _builtins.str: + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter + def environments(self) -> Sequence['outputs.GetProjectEnvironmentResult']: + return pulumi.get(self, "environments") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter + def name(self) -> _builtins.str: + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="organizationId") + def organization_id(self) -> _builtins.str: + return pulumi.get(self, "organization_id") + + +class AwaitableGetProjectResult(GetProjectResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetProjectResult( + created_at=self.created_at, + default_environment_id=self.default_environment_id, + description=self.description, + env=self.env, + environments=self.environments, + id=self.id, + name=self.name, + organization_id=self.organization_id) + + +def get_project(id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetProjectResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('dokploy:index/getProject:getProject', __args__, opts=opts, typ=GetProjectResult).value + + return AwaitableGetProjectResult( + created_at=pulumi.get(__ret__, 'created_at'), + default_environment_id=pulumi.get(__ret__, 'default_environment_id'), + description=pulumi.get(__ret__, 'description'), + env=pulumi.get(__ret__, 'env'), + environments=pulumi.get(__ret__, 'environments'), + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + organization_id=pulumi.get(__ret__, 'organization_id')) +def get_project_output(id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetProjectResult]: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('dokploy:index/getProject:getProject', __args__, opts=opts, typ=GetProjectResult) + return __ret__.apply(lambda __response__: GetProjectResult( + created_at=pulumi.get(__response__, 'created_at'), + default_environment_id=pulumi.get(__response__, 'default_environment_id'), + description=pulumi.get(__response__, 'description'), + env=pulumi.get(__response__, 'env'), + environments=pulumi.get(__response__, 'environments'), + id=pulumi.get(__response__, 'id'), + name=pulumi.get(__response__, 'name'), + organization_id=pulumi.get(__response__, 'organization_id'))) diff --git a/sdk/python/pulumi_dokploy/get_projects.py b/sdk/python/pulumi_dokploy/get_projects.py new file mode 100644 index 0000000..ce1ad57 --- /dev/null +++ b/sdk/python/pulumi_dokploy/get_projects.py @@ -0,0 +1,68 @@ +# 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 + +__all__ = [ + 'GetProjectsResult', + 'AwaitableGetProjectsResult', + 'get_projects', + 'get_projects_output', +] + +@pulumi.output_type +class GetProjectsResult: + """ + A collection of values returned by getProjects. + """ + def __init__(__self__, projects=None): + if projects and not isinstance(projects, list): + raise TypeError("Expected argument 'projects' to be a list") + pulumi.set(__self__, "projects", projects) + + @_builtins.property + @pulumi.getter + def projects(self) -> Sequence['outputs.GetProjectsProjectResult']: + return pulumi.get(self, "projects") + + +class AwaitableGetProjectsResult(GetProjectsResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetProjectsResult( + projects=self.projects) + + +def get_projects(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetProjectsResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('dokploy:index/getProjects:getProjects', __args__, opts=opts, typ=GetProjectsResult).value + + return AwaitableGetProjectsResult( + projects=pulumi.get(__ret__, 'projects')) +def get_projects_output(opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetProjectsResult]: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('dokploy:index/getProjects:getProjects', __args__, opts=opts, typ=GetProjectsResult) + return __ret__.apply(lambda __response__: GetProjectsResult( + projects=pulumi.get(__response__, 'projects'))) diff --git a/sdk/python/pulumi_dokploy/get_servers.py b/sdk/python/pulumi_dokploy/get_servers.py new file mode 100644 index 0000000..fb23848 --- /dev/null +++ b/sdk/python/pulumi_dokploy/get_servers.py @@ -0,0 +1,68 @@ +# 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 + +__all__ = [ + 'GetServersResult', + 'AwaitableGetServersResult', + 'get_servers', + 'get_servers_output', +] + +@pulumi.output_type +class GetServersResult: + """ + A collection of values returned by getServers. + """ + def __init__(__self__, servers=None): + if servers and not isinstance(servers, list): + raise TypeError("Expected argument 'servers' to be a list") + pulumi.set(__self__, "servers", servers) + + @_builtins.property + @pulumi.getter + def servers(self) -> Sequence['outputs.GetServersServerResult']: + return pulumi.get(self, "servers") + + +class AwaitableGetServersResult(GetServersResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetServersResult( + servers=self.servers) + + +def get_servers(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetServersResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('dokploy:index/getServers:getServers', __args__, opts=opts, typ=GetServersResult).value + + return AwaitableGetServersResult( + servers=pulumi.get(__ret__, 'servers')) +def get_servers_output(opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetServersResult]: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('dokploy:index/getServers:getServers', __args__, opts=opts, typ=GetServersResult) + return __ret__.apply(lambda __response__: GetServersResult( + servers=pulumi.get(__response__, 'servers'))) diff --git a/sdk/python/pulumi_dokploy/maria_db.py b/sdk/python/pulumi_dokploy/maria_db.py new file mode 100644 index 0000000..5522109 --- /dev/null +++ b/sdk/python/pulumi_dokploy/maria_db.py @@ -0,0 +1,1674 @@ +# 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__ = ['MariaDbArgs', 'MariaDb'] + +@pulumi.input_type +class MariaDbArgs: + def __init__(__self__, *, + database_name: pulumi.Input[_builtins.str], + database_password: pulumi.Input[_builtins.str], + database_root_password: pulumi.Input[_builtins.str], + database_user: pulumi.Input[_builtins.str], + docker_image: pulumi.Input[_builtins.str], + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a MariaDb resource. + + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MariaDB `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] docker_image: MariaDB image to run, for example `mariadb:11`. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + pulumi.set(__self__, "database_name", database_name) + pulumi.set(__self__, "database_password", database_password) + pulumi.set(__self__, "database_root_password", database_root_password) + pulumi.set(__self__, "database_user", database_user) + pulumi.set(__self__, "docker_image", docker_image) + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="databaseName") + def database_name(self) -> pulumi.Input[_builtins.str]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @database_name.setter + def database_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_name", value) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Input[_builtins.str]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseRootPassword") + def database_root_password(self) -> pulumi.Input[_builtins.str]: + """ + Password for the MariaDB `root` user. + """ + return pulumi.get(self, "database_root_password") + + @database_root_password.setter + def database_root_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_root_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Input[_builtins.str]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Input[_builtins.str]: + """ + MariaDB image to run, for example `mariadb:11`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.input_type +class _MariaDbState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering MariaDb resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MariaDB `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MariaDB image to run, for example `mariadb:11`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if application_status is not None: + pulumi.set(__self__, "application_status", application_status) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if database_name is not None: + pulumi.set(__self__, "database_name", database_name) + if database_password is not None: + pulumi.set(__self__, "database_password", database_password) + if database_root_password is not None: + pulumi.set(__self__, "database_root_password", database_root_password) + if database_user is not None: + pulumi.set(__self__, "database_user", database_user) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @application_status.setter + def application_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_status", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the database was created. + """ + 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(name="databaseName") + def database_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @database_name.setter + def database_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_name", value) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseRootPassword") + def database_root_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the MariaDB `root` user. + """ + return pulumi.get(self, "database_root_password") + + @database_root_password.setter + def database_root_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_root_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + MariaDB image to run, for example `mariadb:11`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.type_token("dokploy:index/mariaDb:MariaDb") +class MariaDb(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a MariaDb resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MariaDB `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MariaDB image to run, for example `mariadb:11`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MariaDbArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a MariaDb resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param MariaDbArgs 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(MariaDbArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_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__ = MariaDbArgs.__new__(MariaDbArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + if database_name is None and not opts.urn: + raise TypeError("Missing required property 'database_name'") + __props__.__dict__["database_name"] = database_name + if database_password is None and not opts.urn: + raise TypeError("Missing required property 'database_password'") + __props__.__dict__["database_password"] = None if database_password is None else pulumi.Output.secret(database_password) + if database_root_password is None and not opts.urn: + raise TypeError("Missing required property 'database_root_password'") + __props__.__dict__["database_root_password"] = None if database_root_password is None else pulumi.Output.secret(database_root_password) + if database_user is None and not opts.urn: + raise TypeError("Missing required property 'database_user'") + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + if docker_image is None and not opts.urn: + raise TypeError("Missing required property 'docker_image'") + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["application_status"] = None + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["databasePassword", "databaseRootPassword"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(MariaDb, __self__).__init__( + 'dokploy:index/mariaDb:MariaDb', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None) -> 'MariaDb': + """ + Get an existing MariaDb 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] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MariaDB `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MariaDB image to run, for example `mariadb:11`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MariaDbState.__new__(_MariaDbState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["application_status"] = application_status + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["created_at"] = created_at + __props__.__dict__["database_name"] = database_name + __props__.__dict__["database_password"] = database_password + __props__.__dict__["database_root_password"] = database_root_password + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + return MariaDb(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter + def args(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the database was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="databaseName") + def database_name(self) -> pulumi.Output[_builtins.str]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Output[_builtins.str]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @_builtins.property + @pulumi.getter(name="databaseRootPassword") + def database_root_password(self) -> pulumi.Output[_builtins.str]: + """ + Password for the MariaDB `root` user. + """ + return pulumi.get(self, "database_root_password") + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Output[_builtins.str]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> pulumi.Output[_builtins.bool]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Output[_builtins.str]: + """ + MariaDB image to run, for example `mariadb:11`. + """ + return pulumi.get(self, "docker_image") + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the database. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="networkIds") + def network_ids(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @_builtins.property + @pulumi.getter + def replicas(self) -> pulumi.Output[_builtins.int]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + diff --git a/sdk/python/pulumi_dokploy/mongo.py b/sdk/python/pulumi_dokploy/mongo.py new file mode 100644 index 0000000..f28e9e3 --- /dev/null +++ b/sdk/python/pulumi_dokploy/mongo.py @@ -0,0 +1,1624 @@ +# 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__ = ['MongoArgs', 'Mongo'] + +@pulumi.input_type +class MongoArgs: + def __init__(__self__, *, + database_password: pulumi.Input[_builtins.str], + database_user: pulumi.Input[_builtins.str], + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replica_sets: Optional[pulumi.Input[_builtins.bool]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Mongo resource. + + :param pulumi.Input[_builtins.str] database_password: Password for the root user. + :param pulumi.Input[_builtins.str] database_user: Root username to create. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MongoDB image to run. Defaults to `mongo:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.bool] replica_sets: Start the instance as a single-node replica set. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + pulumi.set(__self__, "database_password", database_password) + pulumi.set(__self__, "database_user", database_user) + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replica_sets is not None: + pulumi.set(__self__, "replica_sets", replica_sets) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Input[_builtins.str]: + """ + Password for the root user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Input[_builtins.str]: + """ + Root username to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + MongoDB image to run. Defaults to `mongo:8`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter(name="replicaSets") + def replica_sets(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Start the instance as a single-node replica set. + """ + return pulumi.get(self, "replica_sets") + + @replica_sets.setter + def replica_sets(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "replica_sets", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.input_type +class _MongoState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replica_sets: Optional[pulumi.Input[_builtins.bool]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Mongo resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_password: Password for the root user. + :param pulumi.Input[_builtins.str] database_user: Root username to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MongoDB image to run. Defaults to `mongo:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.bool] replica_sets: Start the instance as a single-node replica set. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if application_status is not None: + pulumi.set(__self__, "application_status", application_status) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if database_password is not None: + pulumi.set(__self__, "database_password", database_password) + if database_user is not None: + pulumi.set(__self__, "database_user", database_user) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replica_sets is not None: + pulumi.set(__self__, "replica_sets", replica_sets) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @application_status.setter + def application_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_status", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the database was created. + """ + 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(name="databasePassword") + def database_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the root user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Root username to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + MongoDB image to run. Defaults to `mongo:8`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter(name="replicaSets") + def replica_sets(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Start the instance as a single-node replica set. + """ + return pulumi.get(self, "replica_sets") + + @replica_sets.setter + def replica_sets(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "replica_sets", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.type_token("dokploy:index/mongo:Mongo") +class Mongo(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replica_sets: Optional[pulumi.Input[_builtins.bool]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Mongo resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] database_password: Password for the root user. + :param pulumi.Input[_builtins.str] database_user: Root username to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MongoDB image to run. Defaults to `mongo:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.bool] replica_sets: Start the instance as a single-node replica set. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MongoArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Mongo resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param MongoArgs 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(MongoArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replica_sets: Optional[pulumi.Input[_builtins.bool]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_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__ = MongoArgs.__new__(MongoArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + if database_password is None and not opts.urn: + raise TypeError("Missing required property 'database_password'") + __props__.__dict__["database_password"] = None if database_password is None else pulumi.Output.secret(database_password) + if database_user is None and not opts.urn: + raise TypeError("Missing required property 'database_user'") + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replica_sets"] = replica_sets + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["application_status"] = None + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["databasePassword"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Mongo, __self__).__init__( + 'dokploy:index/mongo:Mongo', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replica_sets: Optional[pulumi.Input[_builtins.bool]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None) -> 'Mongo': + """ + Get an existing Mongo 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] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_password: Password for the root user. + :param pulumi.Input[_builtins.str] database_user: Root username to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MongoDB image to run. Defaults to `mongo:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.bool] replica_sets: Start the instance as a single-node replica set. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MongoState.__new__(_MongoState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["application_status"] = application_status + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["created_at"] = created_at + __props__.__dict__["database_password"] = database_password + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replica_sets"] = replica_sets + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + return Mongo(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter + def args(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the database was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Output[_builtins.str]: + """ + Password for the root user. + """ + return pulumi.get(self, "database_password") + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Output[_builtins.str]: + """ + Root username to create. + """ + return pulumi.get(self, "database_user") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> pulumi.Output[_builtins.bool]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Output[_builtins.str]: + """ + MongoDB image to run. Defaults to `mongo:8`. + """ + return pulumi.get(self, "docker_image") + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the database. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="networkIds") + def network_ids(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @_builtins.property + @pulumi.getter(name="replicaSets") + def replica_sets(self) -> pulumi.Output[_builtins.bool]: + """ + Start the instance as a single-node replica set. + """ + return pulumi.get(self, "replica_sets") + + @_builtins.property + @pulumi.getter + def replicas(self) -> pulumi.Output[_builtins.int]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + diff --git a/sdk/python/pulumi_dokploy/mount.py b/sdk/python/pulumi_dokploy/mount.py new file mode 100644 index 0000000..80389a1 --- /dev/null +++ b/sdk/python/pulumi_dokploy/mount.py @@ -0,0 +1,486 @@ +# 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: 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): + """ + 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] 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`. + """ + 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) -> Optional[pulumi.Input[_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]]): + pulumi.set(self, "content", value) + + @_builtins.property + @pulumi.getter(name="filePath") + def file_path(self) -> Optional[pulumi.Input[_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]]): + pulumi.set(self, "file_path", value) + + @_builtins.property + @pulumi.getter(name="hostPath") + def host_path(self) -> Optional[pulumi.Input[_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]]): + pulumi.set(self, "host_path", value) + + @_builtins.property + @pulumi.getter(name="volumeName") + def volume_name(self) -> Optional[pulumi.Input[_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]]): + 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): + """ + 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`. + :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) -> Optional[pulumi.Input[_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]]): + pulumi.set(self, "content", value) + + @_builtins.property + @pulumi.getter(name="filePath") + def file_path(self) -> Optional[pulumi.Input[_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]]): + pulumi.set(self, "file_path", value) + + @_builtins.property + @pulumi.getter(name="hostPath") + def host_path(self) -> Optional[pulumi.Input[_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]]): + pulumi.set(self, "host_path", value) + + @_builtins.property + @pulumi.getter(name="mountPath") + def mount_path(self) -> Optional[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: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mount_path", value) + + @_builtins.property + @pulumi.getter(name="serviceId") + def service_id(self) -> Optional[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: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "service_id", value) + + @_builtins.property + @pulumi.getter(name="serviceType") + def service_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`. + """ + return pulumi.get(self, "service_type") + + @service_type.setter + def service_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "service_type", value) + + @_builtins.property + @pulumi.getter + def type(self) -> Optional[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: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "type", value) + + @_builtins.property + @pulumi.getter(name="volumeName") + def volume_name(self) -> Optional[pulumi.Input[_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]]): + 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: 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, + __props__=None): + """ + Create a Mount resource with the given unique name, props, and options. + + :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`. + :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): + """ + Create a Mount resource with the given unique name, props, and options. + + :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: 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, + __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: 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': + """ + 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`. + :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`. + """ + 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") + diff --git a/sdk/python/pulumi_dokploy/my_sql.py b/sdk/python/pulumi_dokploy/my_sql.py new file mode 100644 index 0000000..fb01374 --- /dev/null +++ b/sdk/python/pulumi_dokploy/my_sql.py @@ -0,0 +1,1674 @@ +# 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__ = ['MySqlArgs', 'MySql'] + +@pulumi.input_type +class MySqlArgs: + def __init__(__self__, *, + database_name: pulumi.Input[_builtins.str], + database_password: pulumi.Input[_builtins.str], + database_root_password: pulumi.Input[_builtins.str], + database_user: pulumi.Input[_builtins.str], + docker_image: pulumi.Input[_builtins.str], + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a MySql resource. + + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MySQL `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] docker_image: MySQL image to run, for example `mysql:8`. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + pulumi.set(__self__, "database_name", database_name) + pulumi.set(__self__, "database_password", database_password) + pulumi.set(__self__, "database_root_password", database_root_password) + pulumi.set(__self__, "database_user", database_user) + pulumi.set(__self__, "docker_image", docker_image) + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="databaseName") + def database_name(self) -> pulumi.Input[_builtins.str]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @database_name.setter + def database_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_name", value) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Input[_builtins.str]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseRootPassword") + def database_root_password(self) -> pulumi.Input[_builtins.str]: + """ + Password for the MySQL `root` user. + """ + return pulumi.get(self, "database_root_password") + + @database_root_password.setter + def database_root_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_root_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Input[_builtins.str]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Input[_builtins.str]: + """ + MySQL image to run, for example `mysql:8`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.input_type +class _MySqlState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering MySql resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MySQL `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MySQL image to run, for example `mysql:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if application_status is not None: + pulumi.set(__self__, "application_status", application_status) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if database_name is not None: + pulumi.set(__self__, "database_name", database_name) + if database_password is not None: + pulumi.set(__self__, "database_password", database_password) + if database_root_password is not None: + pulumi.set(__self__, "database_root_password", database_root_password) + if database_user is not None: + pulumi.set(__self__, "database_user", database_user) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @application_status.setter + def application_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_status", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the database was created. + """ + 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(name="databaseName") + def database_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @database_name.setter + def database_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_name", value) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseRootPassword") + def database_root_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the MySQL `root` user. + """ + return pulumi.get(self, "database_root_password") + + @database_root_password.setter + def database_root_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_root_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + MySQL image to run, for example `mysql:8`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.type_token("dokploy:index/mySql:MySql") +class MySql(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a MySql resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MySQL `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MySQL image to run, for example `mysql:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MySqlArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a MySql resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param MySqlArgs 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(MySqlArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_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__ = MySqlArgs.__new__(MySqlArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + if database_name is None and not opts.urn: + raise TypeError("Missing required property 'database_name'") + __props__.__dict__["database_name"] = database_name + if database_password is None and not opts.urn: + raise TypeError("Missing required property 'database_password'") + __props__.__dict__["database_password"] = None if database_password is None else pulumi.Output.secret(database_password) + if database_root_password is None and not opts.urn: + raise TypeError("Missing required property 'database_root_password'") + __props__.__dict__["database_root_password"] = None if database_root_password is None else pulumi.Output.secret(database_root_password) + if database_user is None and not opts.urn: + raise TypeError("Missing required property 'database_user'") + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + if docker_image is None and not opts.urn: + raise TypeError("Missing required property 'docker_image'") + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["application_status"] = None + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["databasePassword", "databaseRootPassword"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(MySql, __self__).__init__( + 'dokploy:index/mySql:MySql', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_root_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None) -> 'MySql': + """ + Get an existing MySql 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] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_root_password: Password for the MySQL `root` user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: MySQL image to run, for example `mysql:8`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MySqlState.__new__(_MySqlState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["application_status"] = application_status + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["created_at"] = created_at + __props__.__dict__["database_name"] = database_name + __props__.__dict__["database_password"] = database_password + __props__.__dict__["database_root_password"] = database_root_password + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + return MySql(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter + def args(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the database was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="databaseName") + def database_name(self) -> pulumi.Output[_builtins.str]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Output[_builtins.str]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @_builtins.property + @pulumi.getter(name="databaseRootPassword") + def database_root_password(self) -> pulumi.Output[_builtins.str]: + """ + Password for the MySQL `root` user. + """ + return pulumi.get(self, "database_root_password") + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Output[_builtins.str]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> pulumi.Output[_builtins.bool]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Output[_builtins.str]: + """ + MySQL image to run, for example `mysql:8`. + """ + return pulumi.get(self, "docker_image") + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the database. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="networkIds") + def network_ids(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @_builtins.property + @pulumi.getter + def replicas(self) -> pulumi.Output[_builtins.int]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + diff --git a/sdk/python/pulumi_dokploy/outputs.py b/sdk/python/pulumi_dokploy/outputs.py new file mode 100644 index 0000000..69bad9e --- /dev/null +++ b/sdk/python/pulumi_dokploy/outputs.py @@ -0,0 +1,114 @@ +# 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__ = [ + 'GetProjectEnvironmentResult', + 'GetProjectsProjectResult', + 'GetServersServerResult', +] + +@pulumi.output_type +class GetProjectEnvironmentResult(dict): + def __init__(__self__, *, + id: _builtins.str, + is_default: _builtins.bool, + name: _builtins.str): + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "is_default", is_default) + pulumi.set(__self__, "name", name) + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="isDefault") + def is_default(self) -> _builtins.bool: + return pulumi.get(self, "is_default") + + @_builtins.property + @pulumi.getter + def name(self) -> _builtins.str: + return pulumi.get(self, "name") + + +@pulumi.output_type +class GetProjectsProjectResult(dict): + def __init__(__self__, *, + default_environment_id: _builtins.str, + description: _builtins.str, + id: _builtins.str, + name: _builtins.str): + pulumi.set(__self__, "default_environment_id", default_environment_id) + pulumi.set(__self__, "description", description) + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + + @_builtins.property + @pulumi.getter(name="defaultEnvironmentId") + def default_environment_id(self) -> _builtins.str: + return pulumi.get(self, "default_environment_id") + + @_builtins.property + @pulumi.getter + def description(self) -> _builtins.str: + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter + def name(self) -> _builtins.str: + return pulumi.get(self, "name") + + +@pulumi.output_type +class GetServersServerResult(dict): + def __init__(__self__, *, + id: _builtins.str, + ip_address: _builtins.str, + name: _builtins.str, + server_status: _builtins.str): + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "ip_address", ip_address) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "server_status", server_status) + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="ipAddress") + def ip_address(self) -> _builtins.str: + return pulumi.get(self, "ip_address") + + @_builtins.property + @pulumi.getter + def name(self) -> _builtins.str: + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="serverStatus") + def server_status(self) -> _builtins.str: + return pulumi.get(self, "server_status") + + diff --git a/sdk/python/pulumi_dokploy/port.py b/sdk/python/pulumi_dokploy/port.py new file mode 100644 index 0000000..ee66e8a --- /dev/null +++ b/sdk/python/pulumi_dokploy/port.py @@ -0,0 +1,345 @@ +# 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__ = ['PortArgs', 'Port'] + +@pulumi.input_type +class PortArgs: + def __init__(__self__, *, + application_id: pulumi.Input[_builtins.str], + protocol: pulumi.Input[_builtins.str], + published_port: pulumi.Input[_builtins.int], + target_port: pulumi.Input[_builtins.int], + publish_mode: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Port resource. + + :param pulumi.Input[_builtins.str] application_id: Application this port belongs to. + :param pulumi.Input[_builtins.str] protocol: Transport protocol. Valid values: `tcp`, `udp`. + :param pulumi.Input[_builtins.int] published_port: Port exposed on the host. + :param pulumi.Input[_builtins.int] target_port: Port the container listens on. + :param pulumi.Input[_builtins.str] publish_mode: Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + """ + pulumi.set(__self__, "application_id", application_id) + pulumi.set(__self__, "protocol", protocol) + pulumi.set(__self__, "published_port", published_port) + pulumi.set(__self__, "target_port", target_port) + if publish_mode is not None: + pulumi.set(__self__, "publish_mode", publish_mode) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Input[_builtins.str]: + """ + Application this port belongs to. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter + def protocol(self) -> pulumi.Input[_builtins.str]: + """ + Transport protocol. Valid values: `tcp`, `udp`. + """ + return pulumi.get(self, "protocol") + + @protocol.setter + def protocol(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "protocol", value) + + @_builtins.property + @pulumi.getter(name="publishedPort") + def published_port(self) -> pulumi.Input[_builtins.int]: + """ + Port exposed on the host. + """ + return pulumi.get(self, "published_port") + + @published_port.setter + def published_port(self, value: pulumi.Input[_builtins.int]): + pulumi.set(self, "published_port", value) + + @_builtins.property + @pulumi.getter(name="targetPort") + def target_port(self) -> pulumi.Input[_builtins.int]: + """ + Port the container listens on. + """ + return pulumi.get(self, "target_port") + + @target_port.setter + def target_port(self, value: pulumi.Input[_builtins.int]): + pulumi.set(self, "target_port", value) + + @_builtins.property + @pulumi.getter(name="publishMode") + def publish_mode(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + """ + return pulumi.get(self, "publish_mode") + + @publish_mode.setter + def publish_mode(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "publish_mode", value) + + +@pulumi.input_type +class _PortState: + def __init__(__self__, *, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + protocol: Optional[pulumi.Input[_builtins.str]] = None, + publish_mode: Optional[pulumi.Input[_builtins.str]] = None, + published_port: Optional[pulumi.Input[_builtins.int]] = None, + target_port: Optional[pulumi.Input[_builtins.int]] = None): + """ + Input properties used for looking up and filtering Port resources. + + :param pulumi.Input[_builtins.str] application_id: Application this port belongs to. + :param pulumi.Input[_builtins.str] protocol: Transport protocol. Valid values: `tcp`, `udp`. + :param pulumi.Input[_builtins.str] publish_mode: Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + :param pulumi.Input[_builtins.int] published_port: Port exposed on the host. + :param pulumi.Input[_builtins.int] target_port: Port the container listens on. + """ + if application_id is not None: + pulumi.set(__self__, "application_id", application_id) + if protocol is not None: + pulumi.set(__self__, "protocol", protocol) + if publish_mode is not None: + pulumi.set(__self__, "publish_mode", publish_mode) + if published_port is not None: + pulumi.set(__self__, "published_port", published_port) + if target_port is not None: + pulumi.set(__self__, "target_port", target_port) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Application this port belongs to. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter + def protocol(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Transport protocol. Valid values: `tcp`, `udp`. + """ + return pulumi.get(self, "protocol") + + @protocol.setter + def protocol(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "protocol", value) + + @_builtins.property + @pulumi.getter(name="publishMode") + def publish_mode(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + """ + return pulumi.get(self, "publish_mode") + + @publish_mode.setter + def publish_mode(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "publish_mode", value) + + @_builtins.property + @pulumi.getter(name="publishedPort") + def published_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Port exposed on the host. + """ + return pulumi.get(self, "published_port") + + @published_port.setter + def published_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "published_port", value) + + @_builtins.property + @pulumi.getter(name="targetPort") + def target_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Port the container listens on. + """ + return pulumi.get(self, "target_port") + + @target_port.setter + def target_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "target_port", value) + + +@pulumi.type_token("dokploy:index/port:Port") +class Port(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + protocol: Optional[pulumi.Input[_builtins.str]] = None, + publish_mode: Optional[pulumi.Input[_builtins.str]] = None, + published_port: Optional[pulumi.Input[_builtins.int]] = None, + target_port: Optional[pulumi.Input[_builtins.int]] = None, + __props__=None): + """ + Create a Port resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] application_id: Application this port belongs to. + :param pulumi.Input[_builtins.str] protocol: Transport protocol. Valid values: `tcp`, `udp`. + :param pulumi.Input[_builtins.str] publish_mode: Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + :param pulumi.Input[_builtins.int] published_port: Port exposed on the host. + :param pulumi.Input[_builtins.int] target_port: Port the container listens on. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: PortArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Port resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param PortArgs 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(PortArgs, 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, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + protocol: Optional[pulumi.Input[_builtins.str]] = None, + publish_mode: Optional[pulumi.Input[_builtins.str]] = None, + published_port: Optional[pulumi.Input[_builtins.int]] = None, + target_port: Optional[pulumi.Input[_builtins.int]] = 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__ = PortArgs.__new__(PortArgs) + + if application_id is None and not opts.urn: + raise TypeError("Missing required property 'application_id'") + __props__.__dict__["application_id"] = application_id + if protocol is None and not opts.urn: + raise TypeError("Missing required property 'protocol'") + __props__.__dict__["protocol"] = protocol + __props__.__dict__["publish_mode"] = publish_mode + if published_port is None and not opts.urn: + raise TypeError("Missing required property 'published_port'") + __props__.__dict__["published_port"] = published_port + if target_port is None and not opts.urn: + raise TypeError("Missing required property 'target_port'") + __props__.__dict__["target_port"] = target_port + super(Port, __self__).__init__( + 'dokploy:index/port:Port', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + protocol: Optional[pulumi.Input[_builtins.str]] = None, + publish_mode: Optional[pulumi.Input[_builtins.str]] = None, + published_port: Optional[pulumi.Input[_builtins.int]] = None, + target_port: Optional[pulumi.Input[_builtins.int]] = None) -> 'Port': + """ + Get an existing Port 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] application_id: Application this port belongs to. + :param pulumi.Input[_builtins.str] protocol: Transport protocol. Valid values: `tcp`, `udp`. + :param pulumi.Input[_builtins.str] publish_mode: Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + :param pulumi.Input[_builtins.int] published_port: Port exposed on the host. + :param pulumi.Input[_builtins.int] target_port: Port the container listens on. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _PortState.__new__(_PortState) + + __props__.__dict__["application_id"] = application_id + __props__.__dict__["protocol"] = protocol + __props__.__dict__["publish_mode"] = publish_mode + __props__.__dict__["published_port"] = published_port + __props__.__dict__["target_port"] = target_port + return Port(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Output[_builtins.str]: + """ + Application this port belongs to. + """ + return pulumi.get(self, "application_id") + + @_builtins.property + @pulumi.getter + def protocol(self) -> pulumi.Output[_builtins.str]: + """ + Transport protocol. Valid values: `tcp`, `udp`. + """ + return pulumi.get(self, "protocol") + + @_builtins.property + @pulumi.getter(name="publishMode") + def publish_mode(self) -> pulumi.Output[_builtins.str]: + """ + Docker Swarm publish mode. `host` binds directly to the node; `ingress` uses the swarm routing mesh. Valid values: `ingress`, `host`. + """ + return pulumi.get(self, "publish_mode") + + @_builtins.property + @pulumi.getter(name="publishedPort") + def published_port(self) -> pulumi.Output[_builtins.int]: + """ + Port exposed on the host. + """ + return pulumi.get(self, "published_port") + + @_builtins.property + @pulumi.getter(name="targetPort") + def target_port(self) -> pulumi.Output[_builtins.int]: + """ + Port the container listens on. + """ + return pulumi.get(self, "target_port") + diff --git a/sdk/python/pulumi_dokploy/postgres.py b/sdk/python/pulumi_dokploy/postgres.py new file mode 100644 index 0000000..c71a735 --- /dev/null +++ b/sdk/python/pulumi_dokploy/postgres.py @@ -0,0 +1,1626 @@ +# 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__ = ['PostgresArgs', 'Postgres'] + +@pulumi.input_type +class PostgresArgs: + def __init__(__self__, *, + database_name: pulumi.Input[_builtins.str], + database_password: pulumi.Input[_builtins.str], + database_user: pulumi.Input[_builtins.str], + docker_image: pulumi.Input[_builtins.str], + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Postgres resource. + + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] docker_image: PostgreSQL image to run, for example `postgres:16`. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + pulumi.set(__self__, "database_name", database_name) + pulumi.set(__self__, "database_password", database_password) + pulumi.set(__self__, "database_user", database_user) + pulumi.set(__self__, "docker_image", docker_image) + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="databaseName") + def database_name(self) -> pulumi.Input[_builtins.str]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @database_name.setter + def database_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_name", value) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Input[_builtins.str]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Input[_builtins.str]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Input[_builtins.str]: + """ + PostgreSQL image to run, for example `postgres:16`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.input_type +class _PostgresState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Postgres resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: PostgreSQL image to run, for example `postgres:16`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if application_status is not None: + pulumi.set(__self__, "application_status", application_status) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if database_name is not None: + pulumi.set(__self__, "database_name", database_name) + if database_password is not None: + pulumi.set(__self__, "database_password", database_password) + if database_user is not None: + pulumi.set(__self__, "database_user", database_user) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @application_status.setter + def application_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_status", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the database was created. + """ + 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(name="databaseName") + def database_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @database_name.setter + def database_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_name", value) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @database_user.setter + def database_user(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_user", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + PostgreSQL image to run, for example `postgres:16`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.type_token("dokploy:index/postgres:Postgres") +class Postgres(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Postgres resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: PostgreSQL image to run, for example `postgres:16`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: PostgresArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Postgres resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param PostgresArgs 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(PostgresArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_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__ = PostgresArgs.__new__(PostgresArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + if database_name is None and not opts.urn: + raise TypeError("Missing required property 'database_name'") + __props__.__dict__["database_name"] = database_name + if database_password is None and not opts.urn: + raise TypeError("Missing required property 'database_password'") + __props__.__dict__["database_password"] = None if database_password is None else pulumi.Output.secret(database_password) + if database_user is None and not opts.urn: + raise TypeError("Missing required property 'database_user'") + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + if docker_image is None and not opts.urn: + raise TypeError("Missing required property 'docker_image'") + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["application_status"] = None + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["databasePassword"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Postgres, __self__).__init__( + 'dokploy:index/postgres:Postgres', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_name: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + database_user: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None) -> 'Postgres': + """ + Get an existing Postgres 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] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_name: Name of the database to create. + :param pulumi.Input[_builtins.str] database_password: Password for the database user. + :param pulumi.Input[_builtins.str] database_user: Database user to create. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: PostgreSQL image to run, for example `postgres:16`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _PostgresState.__new__(_PostgresState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["application_status"] = application_status + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["created_at"] = created_at + __props__.__dict__["database_name"] = database_name + __props__.__dict__["database_password"] = database_password + __props__.__dict__["database_user"] = database_user + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + return Postgres(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter + def args(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the database was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="databaseName") + def database_name(self) -> pulumi.Output[_builtins.str]: + """ + Name of the database to create. + """ + return pulumi.get(self, "database_name") + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Output[_builtins.str]: + """ + Password for the database user. + """ + return pulumi.get(self, "database_password") + + @_builtins.property + @pulumi.getter(name="databaseUser") + def database_user(self) -> pulumi.Output[_builtins.str]: + """ + Database user to create. + """ + return pulumi.get(self, "database_user") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> pulumi.Output[_builtins.bool]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Output[_builtins.str]: + """ + PostgreSQL image to run, for example `postgres:16`. + """ + return pulumi.get(self, "docker_image") + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the database. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="networkIds") + def network_ids(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @_builtins.property + @pulumi.getter + def replicas(self) -> pulumi.Output[_builtins.int]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + diff --git a/sdk/python/pulumi_dokploy/project.py b/sdk/python/pulumi_dokploy/project.py new file mode 100644 index 0000000..6f862bb --- /dev/null +++ b/sdk/python/pulumi_dokploy/project.py @@ -0,0 +1,331 @@ +# 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__ = ['ProjectArgs', 'Project'] + +@pulumi.input_type +class ProjectArgs: + def __init__(__self__, *, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Project resource. + + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + :param pulumi.Input[_builtins.str] name: Display name of the project. + """ + if description is not None: + pulumi.set(__self__, "description", description) + if env is not None: + pulumi.set(__self__, "env", env) + if name is not None: + pulumi.set(__self__, "name", name) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the project. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _ProjectState: + def __init__(__self__, *, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + default_environment_id: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + organization_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Project resources. + + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the project was created. + :param pulumi.Input[_builtins.str] default_environment_id: ID of the `production` environment that Dokploy creates automatically with the project. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + :param pulumi.Input[_builtins.str] name: Display name of the project. + :param pulumi.Input[_builtins.str] organization_id: Organization that owns the project. + """ + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if default_environment_id is not None: + pulumi.set(__self__, "default_environment_id", default_environment_id) + if description is not None: + pulumi.set(__self__, "description", description) + if env is not None: + pulumi.set(__self__, "env", env) + if name is not None: + pulumi.set(__self__, "name", name) + if organization_id is not None: + pulumi.set(__self__, "organization_id", organization_id) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the project was created. + """ + 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(name="defaultEnvironmentId") + def default_environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + ID of the `production` environment that Dokploy creates automatically with the project. + """ + return pulumi.get(self, "default_environment_id") + + @default_environment_id.setter + def default_environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "default_environment_id", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the project. + """ + 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="organizationId") + def organization_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Organization that owns the project. + """ + return pulumi.get(self, "organization_id") + + @organization_id.setter + def organization_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "organization_id", value) + + +@pulumi.type_token("dokploy:index/project:Project") +class Project(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Project resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + :param pulumi.Input[_builtins.str] name: Display name of the project. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[ProjectArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Project resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param ProjectArgs 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(ProjectArgs, 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, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_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__ = ProjectArgs.__new__(ProjectArgs) + + __props__.__dict__["description"] = description + __props__.__dict__["env"] = env + __props__.__dict__["name"] = name + __props__.__dict__["created_at"] = None + __props__.__dict__["default_environment_id"] = None + __props__.__dict__["organization_id"] = None + super(Project, __self__).__init__( + 'dokploy:index/project:Project', + 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, + default_environment_id: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + organization_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Project': + """ + Get an existing Project 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: RFC 3339 timestamp of when the project was created. + :param pulumi.Input[_builtins.str] default_environment_id: ID of the `production` environment that Dokploy creates automatically with the project. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] env: Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + :param pulumi.Input[_builtins.str] name: Display name of the project. + :param pulumi.Input[_builtins.str] organization_id: Organization that owns the project. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ProjectState.__new__(_ProjectState) + + __props__.__dict__["created_at"] = created_at + __props__.__dict__["default_environment_id"] = default_environment_id + __props__.__dict__["description"] = description + __props__.__dict__["env"] = env + __props__.__dict__["name"] = name + __props__.__dict__["organization_id"] = organization_id + return Project(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the project was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="defaultEnvironmentId") + def default_environment_id(self) -> pulumi.Output[_builtins.str]: + """ + ID of the `production` environment that Dokploy creates automatically with the project. + """ + return pulumi.get(self, "default_environment_id") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[_builtins.str]: + """ + Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the project. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="organizationId") + def organization_id(self) -> pulumi.Output[_builtins.str]: + """ + Organization that owns the project. + """ + return pulumi.get(self, "organization_id") + diff --git a/sdk/python/pulumi_dokploy/provider.py b/sdk/python/pulumi_dokploy/provider.py new file mode 100644 index 0000000..b169f3d --- /dev/null +++ b/sdk/python/pulumi_dokploy/provider.py @@ -0,0 +1,217 @@ +# 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__ = ['ProviderArgs', 'Provider'] + +@pulumi.input_type +class ProviderArgs: + def __init__(__self__, *, + api_key: Optional[pulumi.Input[_builtins.str]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + insecure_skip_verify: Optional[pulumi.Input[_builtins.bool]] = None, + timeout_seconds: Optional[pulumi.Input[_builtins.int]] = None): + """ + The set of arguments for constructing a Provider resource. + + :param pulumi.Input[_builtins.str] api_key: API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + :param pulumi.Input[_builtins.str] host: Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + :param pulumi.Input[_builtins.bool] insecure_skip_verify: Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + :param pulumi.Input[_builtins.int] timeout_seconds: Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + """ + if api_key is None: + api_key = _utilities.get_env('DOKPLOY_API_KEY') + if api_key is not None: + pulumi.set(__self__, "api_key", api_key) + if host is None: + host = _utilities.get_env('DOKPLOY_HOST') + if host is not None: + pulumi.set(__self__, "host", host) + if insecure_skip_verify is not None: + pulumi.set(__self__, "insecure_skip_verify", insecure_skip_verify) + if timeout_seconds is None: + timeout_seconds = _utilities.get_env_int('DOKPLOY_TIMEOUT_SECONDS') + if timeout_seconds is not None: + pulumi.set(__self__, "timeout_seconds", timeout_seconds) + + @_builtins.property + @pulumi.getter(name="apiKey") + def api_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + """ + return pulumi.get(self, "api_key") + + @api_key.setter + def api_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "api_key", value) + + @_builtins.property + @pulumi.getter + def host(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + """ + return pulumi.get(self, "host") + + @host.setter + def host(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "host", value) + + @_builtins.property + @pulumi.getter(name="insecureSkipVerify") + def insecure_skip_verify(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + """ + return pulumi.get(self, "insecure_skip_verify") + + @insecure_skip_verify.setter + def insecure_skip_verify(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "insecure_skip_verify", value) + + @_builtins.property + @pulumi.getter(name="timeoutSeconds") + def timeout_seconds(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + """ + return pulumi.get(self, "timeout_seconds") + + @timeout_seconds.setter + def timeout_seconds(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "timeout_seconds", value) + + +@pulumi.type_token("pulumi:providers:dokploy") +class Provider(pulumi.ProviderResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + api_key: Optional[pulumi.Input[_builtins.str]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + insecure_skip_verify: Optional[pulumi.Input[_builtins.bool]] = None, + timeout_seconds: Optional[pulumi.Input[_builtins.int]] = None, + __props__=None): + """ + The provider type for the dokploy package. By default, resources use package-wide configuration + settings, however an explicit `Provider` instance may be created and passed during resource + construction to achieve fine-grained programmatic control over provider settings. See the + [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] api_key: API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + :param pulumi.Input[_builtins.str] host: Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + :param pulumi.Input[_builtins.bool] insecure_skip_verify: Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `false`. + :param pulumi.Input[_builtins.int] timeout_seconds: Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[ProviderArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + The provider type for the dokploy package. By default, resources use package-wide configuration + settings, however an explicit `Provider` instance may be created and passed during resource + construction to achieve fine-grained programmatic control over provider settings. See the + [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + + + :param str resource_name: The name of the resource. + :param ProviderArgs 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(ProviderArgs, 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, + api_key: Optional[pulumi.Input[_builtins.str]] = None, + host: Optional[pulumi.Input[_builtins.str]] = None, + insecure_skip_verify: Optional[pulumi.Input[_builtins.bool]] = None, + timeout_seconds: Optional[pulumi.Input[_builtins.int]] = 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__ = ProviderArgs.__new__(ProviderArgs) + + if api_key is None: + api_key = _utilities.get_env('DOKPLOY_API_KEY') + __props__.__dict__["api_key"] = None if api_key is None else pulumi.Output.secret(api_key) + if host is None: + host = _utilities.get_env('DOKPLOY_HOST') + __props__.__dict__["host"] = host + __props__.__dict__["insecure_skip_verify"] = pulumi.Output.from_input(insecure_skip_verify).apply(pulumi.runtime.to_json) if insecure_skip_verify is not None else None + if timeout_seconds is None: + timeout_seconds = _utilities.get_env_int('DOKPLOY_TIMEOUT_SECONDS') + __props__.__dict__["timeout_seconds"] = pulumi.Output.from_input(timeout_seconds).apply(pulumi.runtime.to_json) if timeout_seconds is not None else None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["apiKey"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Provider, __self__).__init__( + 'dokploy', + resource_name, + __props__, + opts) + + @_builtins.property + @pulumi.getter(name="apiKey") + def api_key(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + API token generated in Dokploy under *Settings > Profile > API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable. + """ + return pulumi.get(self, "api_key") + + @_builtins.property + @pulumi.getter + def host(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Base URL of the Dokploy instance, for example `https://dokploy.example.com`. A trailing `/api` is optional. May also be set with the `DOKPLOY_HOST` environment variable. + """ + return pulumi.get(self, "host") + + @pulumi.output_type + class TerraformConfigResult: + def __init__(__self__, result=None): + if result and not isinstance(result, dict): + raise TypeError("Expected argument 'result' to be a dict") + pulumi.set(__self__, "result", result) + + @_builtins.property + @pulumi.getter + def result(self) -> Mapping[str, Any]: + return pulumi.get(self, "result") + + def terraform_config(__self__) -> pulumi.Output['Provider.TerraformConfigResult']: + """ + This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider. + """ + __args__ = dict() + __args__['__self__'] = __self__ + return pulumi.runtime.call('pulumi:providers:dokploy/terraformConfig', __args__, res=__self__, typ=Provider.TerraformConfigResult) + diff --git a/sdk/python/pulumi_dokploy/pulumi-plugin.json b/sdk/python/pulumi_dokploy/pulumi-plugin.json new file mode 100644 index 0000000..367f36a --- /dev/null +++ b/sdk/python/pulumi_dokploy/pulumi-plugin.json @@ -0,0 +1,6 @@ +{ + "resource": true, + "name": "dokploy", + "version": "0.1.0", + "server": "github://api.github.com/maxvojtkov/pulumi-dokploy" +} diff --git a/sdk/python/pulumi_dokploy/py.typed b/sdk/python/pulumi_dokploy/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/sdk/python/pulumi_dokploy/redirect.py b/sdk/python/pulumi_dokploy/redirect.py new file mode 100644 index 0000000..17a9848 --- /dev/null +++ b/sdk/python/pulumi_dokploy/redirect.py @@ -0,0 +1,325 @@ +# 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__ = ['RedirectArgs', 'Redirect'] + +@pulumi.input_type +class RedirectArgs: + def __init__(__self__, *, + application_id: pulumi.Input[_builtins.str], + regex: pulumi.Input[_builtins.str], + replacement: pulumi.Input[_builtins.str], + permanent: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a Redirect resource. + + :param pulumi.Input[_builtins.str] application_id: Application this redirect belongs to. + :param pulumi.Input[_builtins.str] regex: Regular expression matched against the incoming URL. + :param pulumi.Input[_builtins.str] replacement: Replacement URL, which may reference capture groups such as `${1}`. + :param pulumi.Input[_builtins.bool] permanent: Issue a permanent (301) redirect instead of a temporary (302) one. + """ + pulumi.set(__self__, "application_id", application_id) + pulumi.set(__self__, "regex", regex) + pulumi.set(__self__, "replacement", replacement) + if permanent is not None: + pulumi.set(__self__, "permanent", permanent) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Input[_builtins.str]: + """ + Application this redirect belongs to. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter + def regex(self) -> pulumi.Input[_builtins.str]: + """ + Regular expression matched against the incoming URL. + """ + return pulumi.get(self, "regex") + + @regex.setter + def regex(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "regex", value) + + @_builtins.property + @pulumi.getter + def replacement(self) -> pulumi.Input[_builtins.str]: + """ + Replacement URL, which may reference capture groups such as `${1}`. + """ + return pulumi.get(self, "replacement") + + @replacement.setter + def replacement(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "replacement", value) + + @_builtins.property + @pulumi.getter + def permanent(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Issue a permanent (301) redirect instead of a temporary (302) one. + """ + return pulumi.get(self, "permanent") + + @permanent.setter + def permanent(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "permanent", value) + + +@pulumi.input_type +class _RedirectState: + def __init__(__self__, *, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + permanent: Optional[pulumi.Input[_builtins.bool]] = None, + regex: Optional[pulumi.Input[_builtins.str]] = None, + replacement: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Redirect resources. + + :param pulumi.Input[_builtins.str] application_id: Application this redirect belongs to. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the redirect was created. + :param pulumi.Input[_builtins.bool] permanent: Issue a permanent (301) redirect instead of a temporary (302) one. + :param pulumi.Input[_builtins.str] regex: Regular expression matched against the incoming URL. + :param pulumi.Input[_builtins.str] replacement: Replacement URL, which may reference capture groups such as `${1}`. + """ + if application_id is not None: + pulumi.set(__self__, "application_id", application_id) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if permanent is not None: + pulumi.set(__self__, "permanent", permanent) + if regex is not None: + pulumi.set(__self__, "regex", regex) + if replacement is not None: + pulumi.set(__self__, "replacement", replacement) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Application this redirect belongs to. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the redirect was created. + """ + 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 permanent(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Issue a permanent (301) redirect instead of a temporary (302) one. + """ + return pulumi.get(self, "permanent") + + @permanent.setter + def permanent(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "permanent", value) + + @_builtins.property + @pulumi.getter + def regex(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Regular expression matched against the incoming URL. + """ + return pulumi.get(self, "regex") + + @regex.setter + def regex(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "regex", value) + + @_builtins.property + @pulumi.getter + def replacement(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Replacement URL, which may reference capture groups such as `${1}`. + """ + return pulumi.get(self, "replacement") + + @replacement.setter + def replacement(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "replacement", value) + + +@pulumi.type_token("dokploy:index/redirect:Redirect") +class Redirect(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + permanent: Optional[pulumi.Input[_builtins.bool]] = None, + regex: Optional[pulumi.Input[_builtins.str]] = None, + replacement: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Redirect resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] application_id: Application this redirect belongs to. + :param pulumi.Input[_builtins.bool] permanent: Issue a permanent (301) redirect instead of a temporary (302) one. + :param pulumi.Input[_builtins.str] regex: Regular expression matched against the incoming URL. + :param pulumi.Input[_builtins.str] replacement: Replacement URL, which may reference capture groups such as `${1}`. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RedirectArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Redirect resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param RedirectArgs 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(RedirectArgs, 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, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + permanent: Optional[pulumi.Input[_builtins.bool]] = None, + regex: Optional[pulumi.Input[_builtins.str]] = None, + replacement: Optional[pulumi.Input[_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__ = RedirectArgs.__new__(RedirectArgs) + + if application_id is None and not opts.urn: + raise TypeError("Missing required property 'application_id'") + __props__.__dict__["application_id"] = application_id + __props__.__dict__["permanent"] = permanent + if regex is None and not opts.urn: + raise TypeError("Missing required property 'regex'") + __props__.__dict__["regex"] = regex + if replacement is None and not opts.urn: + raise TypeError("Missing required property 'replacement'") + __props__.__dict__["replacement"] = replacement + __props__.__dict__["created_at"] = None + super(Redirect, __self__).__init__( + 'dokploy:index/redirect:Redirect', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + permanent: Optional[pulumi.Input[_builtins.bool]] = None, + regex: Optional[pulumi.Input[_builtins.str]] = None, + replacement: Optional[pulumi.Input[_builtins.str]] = None) -> 'Redirect': + """ + Get an existing Redirect 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] application_id: Application this redirect belongs to. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the redirect was created. + :param pulumi.Input[_builtins.bool] permanent: Issue a permanent (301) redirect instead of a temporary (302) one. + :param pulumi.Input[_builtins.str] regex: Regular expression matched against the incoming URL. + :param pulumi.Input[_builtins.str] replacement: Replacement URL, which may reference capture groups such as `${1}`. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RedirectState.__new__(_RedirectState) + + __props__.__dict__["application_id"] = application_id + __props__.__dict__["created_at"] = created_at + __props__.__dict__["permanent"] = permanent + __props__.__dict__["regex"] = regex + __props__.__dict__["replacement"] = replacement + return Redirect(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Output[_builtins.str]: + """ + Application this redirect belongs to. + """ + return pulumi.get(self, "application_id") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the redirect was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def permanent(self) -> pulumi.Output[_builtins.bool]: + """ + Issue a permanent (301) redirect instead of a temporary (302) one. + """ + return pulumi.get(self, "permanent") + + @_builtins.property + @pulumi.getter + def regex(self) -> pulumi.Output[_builtins.str]: + """ + Regular expression matched against the incoming URL. + """ + return pulumi.get(self, "regex") + + @_builtins.property + @pulumi.getter + def replacement(self) -> pulumi.Output[_builtins.str]: + """ + Replacement URL, which may reference capture groups such as `${1}`. + """ + return pulumi.get(self, "replacement") + diff --git a/sdk/python/pulumi_dokploy/redis.py b/sdk/python/pulumi_dokploy/redis.py new file mode 100644 index 0000000..904312c --- /dev/null +++ b/sdk/python/pulumi_dokploy/redis.py @@ -0,0 +1,1530 @@ +# 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__ = ['RedisArgs', 'Redis'] + +@pulumi.input_type +class RedisArgs: + def __init__(__self__, *, + database_password: pulumi.Input[_builtins.str], + docker_image: pulumi.Input[_builtins.str], + environment_id: pulumi.Input[_builtins.str], + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Redis resource. + + :param pulumi.Input[_builtins.str] database_password: Password used to authenticate to Redis. + :param pulumi.Input[_builtins.str] docker_image: Redis image to run, for example `redis:7`. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + pulumi.set(__self__, "database_password", database_password) + pulumi.set(__self__, "docker_image", docker_image) + pulumi.set(__self__, "environment_id", environment_id) + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Input[_builtins.str]: + """ + Password used to authenticate to Redis. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Input[_builtins.str]: + """ + Redis image to run, for example `redis:7`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Input[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.input_type +class _RedisState: + def __init__(__self__, *, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Redis resources. + + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_password: Password used to authenticate to Redis. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: Redis image to run, for example `redis:7`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + if app_name is not None: + pulumi.set(__self__, "app_name", app_name) + if application_status is not None: + pulumi.set(__self__, "application_status", application_status) + if args is not None: + pulumi.set(__self__, "args", args) + if command is not None: + pulumi.set(__self__, "command", command) + if cpu_limit is not None: + pulumi.set(__self__, "cpu_limit", cpu_limit) + if cpu_reservation is not None: + pulumi.set(__self__, "cpu_reservation", cpu_reservation) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if database_password is not None: + pulumi.set(__self__, "database_password", database_password) + if description is not None: + pulumi.set(__self__, "description", description) + if detach_dokploy_network is not None: + pulumi.set(__self__, "detach_dokploy_network", detach_dokploy_network) + if docker_image is not None: + pulumi.set(__self__, "docker_image", docker_image) + if endpoint_spec_swarm is not None: + pulumi.set(__self__, "endpoint_spec_swarm", endpoint_spec_swarm) + if env is not None: + pulumi.set(__self__, "env", env) + if environment_id is not None: + pulumi.set(__self__, "environment_id", environment_id) + if external_port is not None: + pulumi.set(__self__, "external_port", external_port) + if health_check_swarm is not None: + pulumi.set(__self__, "health_check_swarm", health_check_swarm) + if labels_swarm is not None: + pulumi.set(__self__, "labels_swarm", labels_swarm) + if memory_limit is not None: + pulumi.set(__self__, "memory_limit", memory_limit) + if memory_reservation is not None: + pulumi.set(__self__, "memory_reservation", memory_reservation) + if mode_swarm is not None: + pulumi.set(__self__, "mode_swarm", mode_swarm) + if name is not None: + pulumi.set(__self__, "name", name) + if network_ids is not None: + pulumi.set(__self__, "network_ids", network_ids) + if network_swarm is not None: + pulumi.set(__self__, "network_swarm", network_swarm) + if placement_swarm is not None: + pulumi.set(__self__, "placement_swarm", placement_swarm) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + if restart_policy_swarm is not None: + pulumi.set(__self__, "restart_policy_swarm", restart_policy_swarm) + if rollback_config_swarm is not None: + pulumi.set(__self__, "rollback_config_swarm", rollback_config_swarm) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if stop_grace_period_swarm is not None: + pulumi.set(__self__, "stop_grace_period_swarm", stop_grace_period_swarm) + if ulimits_swarm is not None: + pulumi.set(__self__, "ulimits_swarm", ulimits_swarm) + if update_config_swarm is not None: + pulumi.set(__self__, "update_config_swarm", update_config_swarm) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @app_name.setter + def app_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "app_name", value) + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @application_status.setter + def application_status(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_status", value) + + @_builtins.property + @pulumi.getter + def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @args.setter + def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "args", value) + + @_builtins.property + @pulumi.getter + def command(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @command.setter + def command(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "command", value) + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @cpu_limit.setter + def cpu_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_limit", value) + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @cpu_reservation.setter + def cpu_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cpu_reservation", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the database was created. + """ + 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(name="databasePassword") + def database_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password used to authenticate to Redis. + """ + return pulumi.get(self, "database_password") + + @database_password.setter + def database_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "database_password", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @detach_dokploy_network.setter + def detach_dokploy_network(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "detach_dokploy_network", value) + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Redis image to run, for example `redis:7`. + """ + return pulumi.get(self, "docker_image") + + @docker_image.setter + def docker_image(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "docker_image", value) + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @endpoint_spec_swarm.setter + def endpoint_spec_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "endpoint_spec_swarm", value) + + @_builtins.property + @pulumi.getter + def env(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @env.setter + def env(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "env", value) + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @environment_id.setter + def environment_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "environment_id", value) + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @external_port.setter + def external_port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "external_port", value) + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @health_check_swarm.setter + def health_check_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "health_check_swarm", value) + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @labels_swarm.setter + def labels_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "labels_swarm", value) + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @memory_limit.setter + def memory_limit(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_limit", value) + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @memory_reservation.setter + def memory_reservation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "memory_reservation", value) + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @mode_swarm.setter + def mode_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode_swarm", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the database. + """ + 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="networkIds") + def network_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @network_ids.setter + def network_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "network_ids", value) + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @network_swarm.setter + def network_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "network_swarm", value) + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @placement_swarm.setter + def placement_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "placement_swarm", value) + + @_builtins.property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "replicas", value) + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @restart_policy_swarm.setter + def restart_policy_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "restart_policy_swarm", value) + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @rollback_config_swarm.setter + def rollback_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "rollback_config_swarm", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @stop_grace_period_swarm.setter + def stop_grace_period_swarm(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "stop_grace_period_swarm", value) + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @ulimits_swarm.setter + def ulimits_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ulimits_swarm", value) + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + + @update_config_swarm.setter + def update_config_swarm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update_config_swarm", value) + + +@pulumi.type_token("dokploy:index/redis:Redis") +class Redis(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Redis resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] database_password: Password used to authenticate to Redis. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: Redis image to run, for example `redis:7`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RedisArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Redis resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param RedisArgs 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(RedisArgs, 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, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_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__ = RedisArgs.__new__(RedisArgs) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + if database_password is None and not opts.urn: + raise TypeError("Missing required property 'database_password'") + __props__.__dict__["database_password"] = None if database_password is None else pulumi.Output.secret(database_password) + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + if docker_image is None and not opts.urn: + raise TypeError("Missing required property 'docker_image'") + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + if environment_id is None and not opts.urn: + raise TypeError("Missing required property 'environment_id'") + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + __props__.__dict__["application_status"] = None + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["databasePassword"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Redis, __self__).__init__( + 'dokploy:index/redis:Redis', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_name: Optional[pulumi.Input[_builtins.str]] = None, + application_status: Optional[pulumi.Input[_builtins.str]] = None, + args: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + command: Optional[pulumi.Input[_builtins.str]] = None, + cpu_limit: Optional[pulumi.Input[_builtins.str]] = None, + cpu_reservation: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + database_password: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + detach_dokploy_network: Optional[pulumi.Input[_builtins.bool]] = None, + docker_image: Optional[pulumi.Input[_builtins.str]] = None, + endpoint_spec_swarm: Optional[pulumi.Input[_builtins.str]] = None, + env: Optional[pulumi.Input[_builtins.str]] = None, + environment_id: Optional[pulumi.Input[_builtins.str]] = None, + external_port: Optional[pulumi.Input[_builtins.int]] = None, + health_check_swarm: Optional[pulumi.Input[_builtins.str]] = None, + labels_swarm: Optional[pulumi.Input[_builtins.str]] = None, + memory_limit: Optional[pulumi.Input[_builtins.str]] = None, + memory_reservation: Optional[pulumi.Input[_builtins.str]] = None, + mode_swarm: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network_ids: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + network_swarm: Optional[pulumi.Input[_builtins.str]] = None, + placement_swarm: Optional[pulumi.Input[_builtins.str]] = None, + replicas: Optional[pulumi.Input[_builtins.int]] = None, + restart_policy_swarm: Optional[pulumi.Input[_builtins.str]] = None, + rollback_config_swarm: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + stop_grace_period_swarm: Optional[pulumi.Input[_builtins.int]] = None, + ulimits_swarm: Optional[pulumi.Input[_builtins.str]] = None, + update_config_swarm: Optional[pulumi.Input[_builtins.str]] = None) -> 'Redis': + """ + Get an existing Redis 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] app_name: Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + :param pulumi.Input[_builtins.str] application_status: Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] args: Arguments appended to the container command. + :param pulumi.Input[_builtins.str] command: Override the container entrypoint command. + :param pulumi.Input[_builtins.str] cpu_limit: Hard CPU limit, for example `1`. + :param pulumi.Input[_builtins.str] cpu_reservation: Soft CPU reservation, for example `0.5`. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the database was created. + :param pulumi.Input[_builtins.str] database_password: Password used to authenticate to Redis. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.bool] detach_dokploy_network: Detach the service from the shared `dokploy-network`. + :param pulumi.Input[_builtins.str] docker_image: Redis image to run, for example `redis:7`. + :param pulumi.Input[_builtins.str] endpoint_spec_swarm: Docker Swarm endpoint specification, as a JSON object. + :param pulumi.Input[_builtins.str] env: Environment variables in `KEY=value` format, one per line. + :param pulumi.Input[_builtins.str] environment_id: Environment this database belongs to. + :param pulumi.Input[_builtins.int] external_port: Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + :param pulumi.Input[_builtins.str] health_check_swarm: Docker Swarm health check configuration, as a JSON object. + :param pulumi.Input[_builtins.str] labels_swarm: Docker Swarm service labels, as a JSON object. + :param pulumi.Input[_builtins.str] memory_limit: Hard memory limit, for example `512m`. + :param pulumi.Input[_builtins.str] memory_reservation: Soft memory reservation, for example `256m`. + :param pulumi.Input[_builtins.str] mode_swarm: Docker Swarm service mode, as a JSON object. + :param pulumi.Input[_builtins.str] name: Display name of the database. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] network_ids: IDs of additional Docker networks to attach. + :param pulumi.Input[_builtins.str] network_swarm: Docker Swarm network attachments, as a JSON array. + :param pulumi.Input[_builtins.str] placement_swarm: Docker Swarm placement constraints, as a JSON object. + :param pulumi.Input[_builtins.int] replicas: Number of replicas to run. + :param pulumi.Input[_builtins.str] restart_policy_swarm: Docker Swarm restart policy, as a JSON object. + :param pulumi.Input[_builtins.str] rollback_config_swarm: Docker Swarm rollback configuration, as a JSON object. + :param pulumi.Input[_builtins.str] server_id: Remote server to deploy on. Omit to use the Dokploy host itself. + :param pulumi.Input[_builtins.int] stop_grace_period_swarm: Grace period in nanoseconds before a container is killed. + :param pulumi.Input[_builtins.str] ulimits_swarm: Docker Swarm ulimits, as a JSON object. + :param pulumi.Input[_builtins.str] update_config_swarm: Docker Swarm rolling update configuration, as a JSON object. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RedisState.__new__(_RedisState) + + __props__.__dict__["app_name"] = app_name + __props__.__dict__["application_status"] = application_status + __props__.__dict__["args"] = args + __props__.__dict__["command"] = command + __props__.__dict__["cpu_limit"] = cpu_limit + __props__.__dict__["cpu_reservation"] = cpu_reservation + __props__.__dict__["created_at"] = created_at + __props__.__dict__["database_password"] = database_password + __props__.__dict__["description"] = description + __props__.__dict__["detach_dokploy_network"] = detach_dokploy_network + __props__.__dict__["docker_image"] = docker_image + __props__.__dict__["endpoint_spec_swarm"] = endpoint_spec_swarm + __props__.__dict__["env"] = env + __props__.__dict__["environment_id"] = environment_id + __props__.__dict__["external_port"] = external_port + __props__.__dict__["health_check_swarm"] = health_check_swarm + __props__.__dict__["labels_swarm"] = labels_swarm + __props__.__dict__["memory_limit"] = memory_limit + __props__.__dict__["memory_reservation"] = memory_reservation + __props__.__dict__["mode_swarm"] = mode_swarm + __props__.__dict__["name"] = name + __props__.__dict__["network_ids"] = network_ids + __props__.__dict__["network_swarm"] = network_swarm + __props__.__dict__["placement_swarm"] = placement_swarm + __props__.__dict__["replicas"] = replicas + __props__.__dict__["restart_policy_swarm"] = restart_policy_swarm + __props__.__dict__["rollback_config_swarm"] = rollback_config_swarm + __props__.__dict__["server_id"] = server_id + __props__.__dict__["stop_grace_period_swarm"] = stop_grace_period_swarm + __props__.__dict__["ulimits_swarm"] = ulimits_swarm + __props__.__dict__["update_config_swarm"] = update_config_swarm + return Redis(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="appName") + def app_name(self) -> pulumi.Output[_builtins.str]: + """ + Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database. + """ + return pulumi.get(self, "app_name") + + @_builtins.property + @pulumi.getter(name="applicationStatus") + def application_status(self) -> pulumi.Output[_builtins.str]: + """ + Current status reported by Dokploy: `idle`, `running`, `done` or `error`. + """ + return pulumi.get(self, "application_status") + + @_builtins.property + @pulumi.getter + def args(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Arguments appended to the container command. + """ + return pulumi.get(self, "args") + + @_builtins.property + @pulumi.getter + def command(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Override the container entrypoint command. + """ + return pulumi.get(self, "command") + + @_builtins.property + @pulumi.getter(name="cpuLimit") + def cpu_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard CPU limit, for example `1`. + """ + return pulumi.get(self, "cpu_limit") + + @_builtins.property + @pulumi.getter(name="cpuReservation") + def cpu_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft CPU reservation, for example `0.5`. + """ + return pulumi.get(self, "cpu_reservation") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the database was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="databasePassword") + def database_password(self) -> pulumi.Output[_builtins.str]: + """ + Password used to authenticate to Redis. + """ + return pulumi.get(self, "database_password") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="detachDokployNetwork") + def detach_dokploy_network(self) -> pulumi.Output[_builtins.bool]: + """ + Detach the service from the shared `dokploy-network`. + """ + return pulumi.get(self, "detach_dokploy_network") + + @_builtins.property + @pulumi.getter(name="dockerImage") + def docker_image(self) -> pulumi.Output[_builtins.str]: + """ + Redis image to run, for example `redis:7`. + """ + return pulumi.get(self, "docker_image") + + @_builtins.property + @pulumi.getter(name="endpointSpecSwarm") + def endpoint_spec_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm endpoint specification, as a JSON object. + """ + return pulumi.get(self, "endpoint_spec_swarm") + + @_builtins.property + @pulumi.getter + def env(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Environment variables in `KEY=value` format, one per line. + """ + return pulumi.get(self, "env") + + @_builtins.property + @pulumi.getter(name="environmentId") + def environment_id(self) -> pulumi.Output[_builtins.str]: + """ + Environment this database belongs to. + """ + return pulumi.get(self, "environment_id") + + @_builtins.property + @pulumi.getter(name="externalPort") + def external_port(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network. + """ + return pulumi.get(self, "external_port") + + @_builtins.property + @pulumi.getter(name="healthCheckSwarm") + def health_check_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm health check configuration, as a JSON object. + """ + return pulumi.get(self, "health_check_swarm") + + @_builtins.property + @pulumi.getter(name="labelsSwarm") + def labels_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service labels, as a JSON object. + """ + return pulumi.get(self, "labels_swarm") + + @_builtins.property + @pulumi.getter(name="memoryLimit") + def memory_limit(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Hard memory limit, for example `512m`. + """ + return pulumi.get(self, "memory_limit") + + @_builtins.property + @pulumi.getter(name="memoryReservation") + def memory_reservation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Soft memory reservation, for example `256m`. + """ + return pulumi.get(self, "memory_reservation") + + @_builtins.property + @pulumi.getter(name="modeSwarm") + def mode_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm service mode, as a JSON object. + """ + return pulumi.get(self, "mode_swarm") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the database. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="networkIds") + def network_ids(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + IDs of additional Docker networks to attach. + """ + return pulumi.get(self, "network_ids") + + @_builtins.property + @pulumi.getter(name="networkSwarm") + def network_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm network attachments, as a JSON array. + """ + return pulumi.get(self, "network_swarm") + + @_builtins.property + @pulumi.getter(name="placementSwarm") + def placement_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm placement constraints, as a JSON object. + """ + return pulumi.get(self, "placement_swarm") + + @_builtins.property + @pulumi.getter + def replicas(self) -> pulumi.Output[_builtins.int]: + """ + Number of replicas to run. + """ + return pulumi.get(self, "replicas") + + @_builtins.property + @pulumi.getter(name="restartPolicySwarm") + def restart_policy_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm restart policy, as a JSON object. + """ + return pulumi.get(self, "restart_policy_swarm") + + @_builtins.property + @pulumi.getter(name="rollbackConfigSwarm") + def rollback_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rollback configuration, as a JSON object. + """ + return pulumi.get(self, "rollback_config_swarm") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Remote server to deploy on. Omit to use the Dokploy host itself. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter(name="stopGracePeriodSwarm") + def stop_grace_period_swarm(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + Grace period in nanoseconds before a container is killed. + """ + return pulumi.get(self, "stop_grace_period_swarm") + + @_builtins.property + @pulumi.getter(name="ulimitsSwarm") + def ulimits_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm ulimits, as a JSON object. + """ + return pulumi.get(self, "ulimits_swarm") + + @_builtins.property + @pulumi.getter(name="updateConfigSwarm") + def update_config_swarm(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Docker Swarm rolling update configuration, as a JSON object. + """ + return pulumi.get(self, "update_config_swarm") + diff --git a/sdk/python/pulumi_dokploy/registry.py b/sdk/python/pulumi_dokploy/registry.py new file mode 100644 index 0000000..9d32469 --- /dev/null +++ b/sdk/python/pulumi_dokploy/registry.py @@ -0,0 +1,469 @@ +# 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__ = ['RegistryArgs', 'Registry'] + +@pulumi.input_type +class RegistryArgs: + def __init__(__self__, *, + password: pulumi.Input[_builtins.str], + registry_name: pulumi.Input[_builtins.str], + registry_url: pulumi.Input[_builtins.str], + username: pulumi.Input[_builtins.str], + image_prefix: Optional[pulumi.Input[_builtins.str]] = None, + registry_type: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Registry resource. + + :param pulumi.Input[_builtins.str] password: Password or access token used to authenticate. + :param pulumi.Input[_builtins.str] registry_name: Display name of the registry. + :param pulumi.Input[_builtins.str] registry_url: Registry hostname, for example `ghcr.io`. + :param pulumi.Input[_builtins.str] username: Username used to authenticate to the registry. + :param pulumi.Input[_builtins.str] image_prefix: Prefix prepended to pushed image names, for example an organization or namespace. + :param pulumi.Input[_builtins.str] registry_type: Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + :param pulumi.Input[_builtins.str] server_id: Server this registry is scoped to. + """ + pulumi.set(__self__, "password", password) + pulumi.set(__self__, "registry_name", registry_name) + pulumi.set(__self__, "registry_url", registry_url) + pulumi.set(__self__, "username", username) + if image_prefix is not None: + pulumi.set(__self__, "image_prefix", image_prefix) + if registry_type is not None: + pulumi.set(__self__, "registry_type", registry_type) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Input[_builtins.str]: + """ + Password or access token used to authenticate. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "password", value) + + @_builtins.property + @pulumi.getter(name="registryName") + def registry_name(self) -> pulumi.Input[_builtins.str]: + """ + Display name of the registry. + """ + return pulumi.get(self, "registry_name") + + @registry_name.setter + def registry_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "registry_name", value) + + @_builtins.property + @pulumi.getter(name="registryUrl") + def registry_url(self) -> pulumi.Input[_builtins.str]: + """ + Registry hostname, for example `ghcr.io`. + """ + return pulumi.get(self, "registry_url") + + @registry_url.setter + def registry_url(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "registry_url", value) + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Input[_builtins.str]: + """ + Username used to authenticate to the registry. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "username", value) + + @_builtins.property + @pulumi.getter(name="imagePrefix") + def image_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Prefix prepended to pushed image names, for example an organization or namespace. + """ + return pulumi.get(self, "image_prefix") + + @image_prefix.setter + def image_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "image_prefix", value) + + @_builtins.property + @pulumi.getter(name="registryType") + def registry_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + """ + return pulumi.get(self, "registry_type") + + @registry_type.setter + def registry_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_type", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server this registry is scoped to. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + +@pulumi.input_type +class _RegistryState: + def __init__(__self__, *, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + image_prefix: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + registry_name: Optional[pulumi.Input[_builtins.str]] = None, + registry_type: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Registry resources. + + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the registry was created. + :param pulumi.Input[_builtins.str] image_prefix: Prefix prepended to pushed image names, for example an organization or namespace. + :param pulumi.Input[_builtins.str] password: Password or access token used to authenticate. + :param pulumi.Input[_builtins.str] registry_name: Display name of the registry. + :param pulumi.Input[_builtins.str] registry_type: Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + :param pulumi.Input[_builtins.str] registry_url: Registry hostname, for example `ghcr.io`. + :param pulumi.Input[_builtins.str] server_id: Server this registry is scoped to. + :param pulumi.Input[_builtins.str] username: Username used to authenticate to the registry. + """ + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if image_prefix is not None: + pulumi.set(__self__, "image_prefix", image_prefix) + if password is not None: + pulumi.set(__self__, "password", password) + if registry_name is not None: + pulumi.set(__self__, "registry_name", registry_name) + if registry_type is not None: + pulumi.set(__self__, "registry_type", registry_type) + if registry_url is not None: + pulumi.set(__self__, "registry_url", registry_url) + if server_id is not None: + pulumi.set(__self__, "server_id", server_id) + if username is not None: + pulumi.set(__self__, "username", username) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the registry was created. + """ + 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(name="imagePrefix") + def image_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Prefix prepended to pushed image names, for example an organization or namespace. + """ + return pulumi.get(self, "image_prefix") + + @image_prefix.setter + def image_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "image_prefix", value) + + @_builtins.property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password or access token used to authenticate. + """ + 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="registryName") + def registry_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the registry. + """ + return pulumi.get(self, "registry_name") + + @registry_name.setter + def registry_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_name", value) + + @_builtins.property + @pulumi.getter(name="registryType") + def registry_type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + """ + return pulumi.get(self, "registry_type") + + @registry_type.setter + def registry_type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_type", value) + + @_builtins.property + @pulumi.getter(name="registryUrl") + def registry_url(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Registry hostname, for example `ghcr.io`. + """ + return pulumi.get(self, "registry_url") + + @registry_url.setter + def registry_url(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "registry_url", value) + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Server this registry is scoped to. + """ + return pulumi.get(self, "server_id") + + @server_id.setter + def server_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server_id", value) + + @_builtins.property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Username used to authenticate to the registry. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "username", value) + + +@pulumi.type_token("dokploy:index/registry:Registry") +class Registry(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + image_prefix: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + registry_name: Optional[pulumi.Input[_builtins.str]] = None, + registry_type: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Registry resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] image_prefix: Prefix prepended to pushed image names, for example an organization or namespace. + :param pulumi.Input[_builtins.str] password: Password or access token used to authenticate. + :param pulumi.Input[_builtins.str] registry_name: Display name of the registry. + :param pulumi.Input[_builtins.str] registry_type: Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + :param pulumi.Input[_builtins.str] registry_url: Registry hostname, for example `ghcr.io`. + :param pulumi.Input[_builtins.str] server_id: Server this registry is scoped to. + :param pulumi.Input[_builtins.str] username: Username used to authenticate to the registry. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RegistryArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Registry resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param RegistryArgs 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(RegistryArgs, 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, + image_prefix: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + registry_name: Optional[pulumi.Input[_builtins.str]] = None, + registry_type: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_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__ = RegistryArgs.__new__(RegistryArgs) + + __props__.__dict__["image_prefix"] = image_prefix + if password is None and not opts.urn: + raise TypeError("Missing required property 'password'") + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) + if registry_name is None and not opts.urn: + raise TypeError("Missing required property 'registry_name'") + __props__.__dict__["registry_name"] = registry_name + __props__.__dict__["registry_type"] = registry_type + if registry_url is None and not opts.urn: + raise TypeError("Missing required property 'registry_url'") + __props__.__dict__["registry_url"] = registry_url + __props__.__dict__["server_id"] = server_id + if username is None and not opts.urn: + raise TypeError("Missing required property 'username'") + __props__.__dict__["username"] = username + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["password"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Registry, __self__).__init__( + 'dokploy:index/registry:Registry', + 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, + image_prefix: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + registry_name: Optional[pulumi.Input[_builtins.str]] = None, + registry_type: Optional[pulumi.Input[_builtins.str]] = None, + registry_url: Optional[pulumi.Input[_builtins.str]] = None, + server_id: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None) -> 'Registry': + """ + Get an existing Registry 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: RFC 3339 timestamp of when the registry was created. + :param pulumi.Input[_builtins.str] image_prefix: Prefix prepended to pushed image names, for example an organization or namespace. + :param pulumi.Input[_builtins.str] password: Password or access token used to authenticate. + :param pulumi.Input[_builtins.str] registry_name: Display name of the registry. + :param pulumi.Input[_builtins.str] registry_type: Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + :param pulumi.Input[_builtins.str] registry_url: Registry hostname, for example `ghcr.io`. + :param pulumi.Input[_builtins.str] server_id: Server this registry is scoped to. + :param pulumi.Input[_builtins.str] username: Username used to authenticate to the registry. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RegistryState.__new__(_RegistryState) + + __props__.__dict__["created_at"] = created_at + __props__.__dict__["image_prefix"] = image_prefix + __props__.__dict__["password"] = password + __props__.__dict__["registry_name"] = registry_name + __props__.__dict__["registry_type"] = registry_type + __props__.__dict__["registry_url"] = registry_url + __props__.__dict__["server_id"] = server_id + __props__.__dict__["username"] = username + return Registry(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the registry was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter(name="imagePrefix") + def image_prefix(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Prefix prepended to pushed image names, for example an organization or namespace. + """ + return pulumi.get(self, "image_prefix") + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Output[_builtins.str]: + """ + Password or access token used to authenticate. + """ + return pulumi.get(self, "password") + + @_builtins.property + @pulumi.getter(name="registryName") + def registry_name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the registry. + """ + return pulumi.get(self, "registry_name") + + @_builtins.property + @pulumi.getter(name="registryType") + def registry_type(self) -> pulumi.Output[_builtins.str]: + """ + Registry kind. Dokploy currently accepts only `cloud`. Valid values: `cloud`. Defaults to `cloud`. + """ + return pulumi.get(self, "registry_type") + + @_builtins.property + @pulumi.getter(name="registryUrl") + def registry_url(self) -> pulumi.Output[_builtins.str]: + """ + Registry hostname, for example `ghcr.io`. + """ + return pulumi.get(self, "registry_url") + + @_builtins.property + @pulumi.getter(name="serverId") + def server_id(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Server this registry is scoped to. + """ + return pulumi.get(self, "server_id") + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Output[_builtins.str]: + """ + Username used to authenticate to the registry. + """ + return pulumi.get(self, "username") + diff --git a/sdk/python/pulumi_dokploy/security.py b/sdk/python/pulumi_dokploy/security.py new file mode 100644 index 0000000..23b6708 --- /dev/null +++ b/sdk/python/pulumi_dokploy/security.py @@ -0,0 +1,280 @@ +# 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__ = ['SecurityArgs', 'Security'] + +@pulumi.input_type +class SecurityArgs: + def __init__(__self__, *, + application_id: pulumi.Input[_builtins.str], + password: pulumi.Input[_builtins.str], + username: pulumi.Input[_builtins.str]): + """ + The set of arguments for constructing a Security resource. + + :param pulumi.Input[_builtins.str] application_id: Application these credentials protect. + :param pulumi.Input[_builtins.str] password: Basic auth password. + :param pulumi.Input[_builtins.str] username: Basic auth username. + """ + pulumi.set(__self__, "application_id", application_id) + pulumi.set(__self__, "password", password) + pulumi.set(__self__, "username", username) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Input[_builtins.str]: + """ + Application these credentials protect. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Input[_builtins.str]: + """ + Basic auth password. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "password", value) + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Input[_builtins.str]: + """ + Basic auth username. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "username", value) + + +@pulumi.input_type +class _SecurityState: + def __init__(__self__, *, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Security resources. + + :param pulumi.Input[_builtins.str] application_id: Application these credentials protect. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the credentials were created. + :param pulumi.Input[_builtins.str] password: Basic auth password. + :param pulumi.Input[_builtins.str] username: Basic auth username. + """ + if application_id is not None: + pulumi.set(__self__, "application_id", application_id) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if password is not None: + pulumi.set(__self__, "password", password) + if username is not None: + pulumi.set(__self__, "username", username) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Application these credentials protect. + """ + return pulumi.get(self, "application_id") + + @application_id.setter + def application_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "application_id", value) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the credentials were created. + """ + 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 password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Basic auth password. + """ + 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 + def username(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Basic auth username. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "username", value) + + +@pulumi.type_token("dokploy:index/security:Security") +class Security(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a Security resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] application_id: Application these credentials protect. + :param pulumi.Input[_builtins.str] password: Basic auth password. + :param pulumi.Input[_builtins.str] username: Basic auth username. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: SecurityArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Security resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param SecurityArgs 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(SecurityArgs, 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, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_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__ = SecurityArgs.__new__(SecurityArgs) + + if application_id is None and not opts.urn: + raise TypeError("Missing required property 'application_id'") + __props__.__dict__["application_id"] = application_id + if password is None and not opts.urn: + raise TypeError("Missing required property 'password'") + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) + if username is None and not opts.urn: + raise TypeError("Missing required property 'username'") + __props__.__dict__["username"] = username + __props__.__dict__["created_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["password"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Security, __self__).__init__( + 'dokploy:index/security:Security', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + application_id: Optional[pulumi.Input[_builtins.str]] = None, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None) -> 'Security': + """ + Get an existing Security 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] application_id: Application these credentials protect. + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the credentials were created. + :param pulumi.Input[_builtins.str] password: Basic auth password. + :param pulumi.Input[_builtins.str] username: Basic auth username. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _SecurityState.__new__(_SecurityState) + + __props__.__dict__["application_id"] = application_id + __props__.__dict__["created_at"] = created_at + __props__.__dict__["password"] = password + __props__.__dict__["username"] = username + return Security(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="applicationId") + def application_id(self) -> pulumi.Output[_builtins.str]: + """ + Application these credentials protect. + """ + return pulumi.get(self, "application_id") + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the credentials were created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Output[_builtins.str]: + """ + Basic auth password. + """ + return pulumi.get(self, "password") + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Output[_builtins.str]: + """ + Basic auth username. + """ + return pulumi.get(self, "username") + diff --git a/sdk/python/pulumi_dokploy/ssh_key.py b/sdk/python/pulumi_dokploy/ssh_key.py new file mode 100644 index 0000000..944b47b --- /dev/null +++ b/sdk/python/pulumi_dokploy/ssh_key.py @@ -0,0 +1,354 @@ +# 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__ = ['SshKeyArgs', 'SshKey'] + +@pulumi.input_type +class SshKeyArgs: + def __init__(__self__, *, + private_key: pulumi.Input[_builtins.str], + public_key: pulumi.Input[_builtins.str], + description: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a SshKey resource. + + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] public_key: OpenSSH-formatted public key. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] name: Display name of the key pair. + """ + pulumi.set(__self__, "private_key", private_key) + pulumi.set(__self__, "public_key", public_key) + if description is not None: + pulumi.set(__self__, "description", description) + if name is not None: + pulumi.set(__self__, "name", name) + + @_builtins.property + @pulumi.getter(name="privateKey") + def private_key(self) -> pulumi.Input[_builtins.str]: + """ + PEM-encoded private key. + """ + return pulumi.get(self, "private_key") + + @private_key.setter + def private_key(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "private_key", value) + + @_builtins.property + @pulumi.getter(name="publicKey") + def public_key(self) -> pulumi.Input[_builtins.str]: + """ + OpenSSH-formatted public key. + """ + return pulumi.get(self, "public_key") + + @public_key.setter + def public_key(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "public_key", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the key pair. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _SshKeyState: + def __init__(__self__, *, + created_at: Optional[pulumi.Input[_builtins.str]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + last_used_at: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + public_key: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering SshKey resources. + + :param pulumi.Input[_builtins.str] created_at: RFC 3339 timestamp of when the key was created. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] last_used_at: RFC 3339 timestamp of when the key was last used, if ever. + :param pulumi.Input[_builtins.str] name: Display name of the key pair. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] public_key: OpenSSH-formatted public key. + """ + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if description is not None: + pulumi.set(__self__, "description", description) + if last_used_at is not None: + pulumi.set(__self__, "last_used_at", last_used_at) + if name is not None: + pulumi.set(__self__, "name", name) + if private_key is not None: + pulumi.set(__self__, "private_key", private_key) + if public_key is not None: + pulumi.set(__self__, "public_key", public_key) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the key was created. + """ + 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 description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter(name="lastUsedAt") + def last_used_at(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + RFC 3339 timestamp of when the key was last used, if ever. + """ + return pulumi.get(self, "last_used_at") + + @last_used_at.setter + def last_used_at(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "last_used_at", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Display name of the key pair. + """ + 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="privateKey") + def private_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + PEM-encoded private key. + """ + return pulumi.get(self, "private_key") + + @private_key.setter + def private_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "private_key", value) + + @_builtins.property + @pulumi.getter(name="publicKey") + def public_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + OpenSSH-formatted public key. + """ + return pulumi.get(self, "public_key") + + @public_key.setter + def public_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "public_key", value) + + +@pulumi.type_token("dokploy:index/sshKey:SshKey") +class SshKey(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + public_key: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Create a SshKey resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] name: Display name of the key pair. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] public_key: OpenSSH-formatted public key. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: SshKeyArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a SshKey resource with the given unique name, props, and options. + + :param str resource_name: The name of the resource. + :param SshKeyArgs 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(SshKeyArgs, 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, + description: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + public_key: Optional[pulumi.Input[_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__ = SshKeyArgs.__new__(SshKeyArgs) + + __props__.__dict__["description"] = description + __props__.__dict__["name"] = name + if private_key is None and not opts.urn: + raise TypeError("Missing required property 'private_key'") + __props__.__dict__["private_key"] = None if private_key is None else pulumi.Output.secret(private_key) + if public_key is None and not opts.urn: + raise TypeError("Missing required property 'public_key'") + __props__.__dict__["public_key"] = public_key + __props__.__dict__["created_at"] = None + __props__.__dict__["last_used_at"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["privateKey"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(SshKey, __self__).__init__( + 'dokploy:index/sshKey:SshKey', + 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, + description: Optional[pulumi.Input[_builtins.str]] = None, + last_used_at: Optional[pulumi.Input[_builtins.str]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + private_key: Optional[pulumi.Input[_builtins.str]] = None, + public_key: Optional[pulumi.Input[_builtins.str]] = None) -> 'SshKey': + """ + Get an existing SshKey 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: RFC 3339 timestamp of when the key was created. + :param pulumi.Input[_builtins.str] description: Free-form description. + :param pulumi.Input[_builtins.str] last_used_at: RFC 3339 timestamp of when the key was last used, if ever. + :param pulumi.Input[_builtins.str] name: Display name of the key pair. + :param pulumi.Input[_builtins.str] private_key: PEM-encoded private key. + :param pulumi.Input[_builtins.str] public_key: OpenSSH-formatted public key. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _SshKeyState.__new__(_SshKeyState) + + __props__.__dict__["created_at"] = created_at + __props__.__dict__["description"] = description + __props__.__dict__["last_used_at"] = last_used_at + __props__.__dict__["name"] = name + __props__.__dict__["private_key"] = private_key + __props__.__dict__["public_key"] = public_key + return SshKey(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the key was created. + """ + return pulumi.get(self, "created_at") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Free-form description. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter(name="lastUsedAt") + def last_used_at(self) -> pulumi.Output[_builtins.str]: + """ + RFC 3339 timestamp of when the key was last used, if ever. + """ + return pulumi.get(self, "last_used_at") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Display name of the key pair. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter(name="privateKey") + def private_key(self) -> pulumi.Output[_builtins.str]: + """ + PEM-encoded private key. + """ + return pulumi.get(self, "private_key") + + @_builtins.property + @pulumi.getter(name="publicKey") + def public_key(self) -> pulumi.Output[_builtins.str]: + """ + OpenSSH-formatted public key. + """ + return pulumi.get(self, "public_key") + diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml new file mode 100644 index 0000000..c4576e3 --- /dev/null +++ b/sdk/python/pyproject.toml @@ -0,0 +1,22 @@ +[project] + name = "pulumi_dokploy" + description = "A Pulumi package for creating and managing Dokploy resources" + dependencies = ["parver>=0.2.1", "pulumi>=3.0.0,<4.0.0", "semver>=2.8.1", "typing-extensions>=4.11,<5; python_version < \"3.11\""] + keywords = ["pulumi", "dokploy", "paas", "docker", "deployment", "category/cloud", "category/infrastructure"] + readme = "README.md" + requires-python = ">=3.9" + version = "0.1.0" + [project.license] + text = "MPL-2.0" + [project.urls] + Homepage = "https://github.com/maxvojtkov/pulumi-dokploy" + Repository = "https://github.com/maxvojtkov/pulumi-dokploy" + +[build-system] + requires = ["setuptools>=61.0"] + build-backend = "setuptools.build_meta" + +[tool] + [tool.setuptools] + [tool.setuptools.package-data] + pulumi_dokploy = ["py.typed", "pulumi-plugin.json"]