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.
This commit is contained in:
2026-08-08 15:28:16 +03:00
commit bb3c15135b
175 changed files with 61774 additions and 0 deletions

1
sdk/dotnet/.gitattributes generated vendored Normal file
View File

@@ -0,0 +1 @@
* linguist-generated

2
sdk/dotnet/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,2 @@
bin
obj

1906
sdk/dotnet/Application.cs generated Normal file

File diff suppressed because it is too large Load Diff

202
sdk/dotnet/Certificate.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Whether Dokploy should renew this certificate automatically.
/// </summary>
[Output("autoRenew")]
public Output<bool> AutoRenew { get; private set; } = null!;
/// <summary>
/// PEM-encoded certificate chain.
/// </summary>
[Output("certificateData")]
public Output<string> CertificateData { get; private set; } = null!;
/// <summary>
/// Path where Dokploy writes the certificate on disk.
/// </summary>
[Output("certificatePath")]
public Output<string> CertificatePath { get; private set; } = null!;
/// <summary>
/// Display name of the certificate.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// PEM-encoded private key.
/// </summary>
[Output("privateKey")]
public Output<string> PrivateKey { get; private set; } = null!;
/// <summary>
/// Server this certificate is installed on.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Create a Certificate resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, CertificateState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/certificate:Certificate", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Certificate resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Certificate Get(string name, Input<string> id, CertificateState? state = null, CustomResourceOptions? options = null)
{
return new Certificate(name, id, state, options);
}
}
public sealed class CertificateArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Whether Dokploy should renew this certificate automatically.
/// </summary>
[Input("autoRenew")]
public Input<bool>? AutoRenew { get; set; }
/// <summary>
/// PEM-encoded certificate chain.
/// </summary>
[Input("certificateData", required: true)]
public Input<string> CertificateData { get; set; } = null!;
/// <summary>
/// Display name of the certificate.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("privateKey", required: true)]
private Input<string>? _privateKey;
/// <summary>
/// PEM-encoded private key.
/// </summary>
public Input<string>? PrivateKey
{
get => _privateKey;
set
{
var emptySecret = Output.CreateSecret(0);
_privateKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Server this certificate is installed on.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
public CertificateArgs()
{
}
public static new CertificateArgs Empty => new CertificateArgs();
}
public sealed class CertificateState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Whether Dokploy should renew this certificate automatically.
/// </summary>
[Input("autoRenew")]
public Input<bool>? AutoRenew { get; set; }
/// <summary>
/// PEM-encoded certificate chain.
/// </summary>
[Input("certificateData")]
public Input<string>? CertificateData { get; set; }
/// <summary>
/// Path where Dokploy writes the certificate on disk.
/// </summary>
[Input("certificatePath")]
public Input<string>? CertificatePath { get; set; }
/// <summary>
/// Display name of the certificate.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("privateKey")]
private Input<string>? _privateKey;
/// <summary>
/// PEM-encoded private key.
/// </summary>
public Input<string>? PrivateKey
{
get => _privateKey;
set
{
var emptySecret = Output.CreateSecret(0);
_privateKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Server this certificate is installed on.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
public CertificateState()
{
}
public static new CertificateState Empty => new CertificateState();
}
}

868
sdk/dotnet/Compose.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack.
/// </summary>
[Output("appName")]
public Output<string> AppName { get; private set; } = null!;
/// <summary>
/// Deploy automatically when the configured trigger fires.
/// </summary>
[Output("autoDeploy")]
public Output<bool> AutoDeploy { get; private set; } = null!;
/// <summary>
/// Bitbucket branch to deploy.
/// </summary>
[Output("bitbucketBranch")]
public Output<string?> BitbucketBranch { get; private set; } = null!;
/// <summary>
/// ID of the configured Bitbucket provider connection.
/// </summary>
[Output("bitbucketId")]
public Output<string?> BitbucketId { get; private set; } = null!;
/// <summary>
/// Bitbucket repository owner.
/// </summary>
[Output("bitbucketOwner")]
public Output<string?> BitbucketOwner { get; private set; } = null!;
/// <summary>
/// Bitbucket repository name.
/// </summary>
[Output("bitbucketRepository")]
public Output<string?> BitbucketRepository { get; private set; } = null!;
/// <summary>
/// Bitbucket repository slug.
/// </summary>
[Output("bitbucketRepositorySlug")]
public Output<string?> BitbucketRepositorySlug { get; private set; } = null!;
/// <summary>
/// GitHub branch to deploy.
/// </summary>
[Output("branch")]
public Output<string?> Branch { get; private set; } = null!;
/// <summary>
/// Custom `docker compose` command to run.
/// </summary>
[Output("command")]
public Output<string> Command { get; private set; } = null!;
/// <summary>
/// Inline Compose file contents. Used when `SourceType` is `Raw`.
/// </summary>
[Output("composeFile")]
public Output<string> ComposeFile { get; private set; } = null!;
/// <summary>
/// Path to the Compose file within the repository.
/// </summary>
[Output("composePath")]
public Output<string> ComposePath { get; private set; } = null!;
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Output("composeStatus")]
public Output<string> ComposeStatus { get; private set; } = null!;
/// <summary>
/// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `Stack`.
/// </summary>
[Output("composeType")]
public Output<string> ComposeType { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the stack was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Branch to deploy for a custom Git remote.
/// </summary>
[Output("customGitBranch")]
public Output<string?> CustomGitBranch { get; private set; } = null!;
/// <summary>
/// SSH key used to clone a private custom Git remote.
/// </summary>
[Output("customGitSshKeyId")]
public Output<string?> CustomGitSshKeyId { get; private set; } = null!;
/// <summary>
/// Git remote URL, when `SourceType` is `Git`.
/// </summary>
[Output("customGitUrl")]
public Output<string?> CustomGitUrl { get; private set; } = null!;
/// <summary>
/// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `False`, which preserves the data.
/// </summary>
[Output("deleteVolumes")]
public Output<bool?> DeleteVolumes { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Clone Git submodules when checking out the repository.
/// </summary>
[Output("enableSubmodules")]
public Output<bool> EnableSubmodules { get; private set; } = null!;
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Output("env")]
public Output<string?> Env { get; private set; } = null!;
/// <summary>
/// Environment this stack belongs to.
/// </summary>
[Output("environmentId")]
public Output<string> EnvironmentId { get; private set; } = null!;
/// <summary>
/// Gitea branch to deploy.
/// </summary>
[Output("giteaBranch")]
public Output<string?> GiteaBranch { get; private set; } = null!;
/// <summary>
/// ID of the configured Gitea provider connection.
/// </summary>
[Output("giteaId")]
public Output<string?> GiteaId { get; private set; } = null!;
/// <summary>
/// Gitea repository owner.
/// </summary>
[Output("giteaOwner")]
public Output<string?> GiteaOwner { get; private set; } = null!;
/// <summary>
/// Gitea repository name.
/// </summary>
[Output("giteaRepository")]
public Output<string?> GiteaRepository { get; private set; } = null!;
/// <summary>
/// ID of the configured GitHub provider connection.
/// </summary>
[Output("githubId")]
public Output<string?> GithubId { get; private set; } = null!;
/// <summary>
/// GitLab branch to deploy.
/// </summary>
[Output("gitlabBranch")]
public Output<string?> GitlabBranch { get; private set; } = null!;
/// <summary>
/// ID of the configured GitLab provider connection.
/// </summary>
[Output("gitlabId")]
public Output<string?> GitlabId { get; private set; } = null!;
/// <summary>
/// GitLab repository owner.
/// </summary>
[Output("gitlabOwner")]
public Output<string?> GitlabOwner { get; private set; } = null!;
/// <summary>
/// Full GitLab namespace path.
/// </summary>
[Output("gitlabPathNamespace")]
public Output<string?> GitlabPathNamespace { get; private set; } = null!;
/// <summary>
/// Numeric GitLab project ID.
/// </summary>
[Output("gitlabProjectId")]
public Output<int?> GitlabProjectId { get; private set; } = null!;
/// <summary>
/// GitLab repository name.
/// </summary>
[Output("gitlabRepository")]
public Output<string?> GitlabRepository { get; private set; } = null!;
/// <summary>
/// Run the stack on its own isolated Docker network.
/// </summary>
[Output("isolatedDeployment")]
public Output<bool> IsolatedDeployment { get; private set; } = null!;
/// <summary>
/// Prefix volume names for isolated deployments. Retained for backwards compatibility.
/// </summary>
[Output("isolatedDeploymentsVolume")]
public Output<bool> IsolatedDeploymentsVolume { get; private set; } = null!;
/// <summary>
/// Display name of the stack.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// GitHub repository owner.
/// </summary>
[Output("owner")]
public Output<string?> Owner { get; private set; } = null!;
/// <summary>
/// Append a random suffix to service and volume names.
/// </summary>
[Output("randomize")]
public Output<bool> Randomize { get; private set; } = null!;
/// <summary>
/// GitHub repository name.
/// </summary>
[Output("repository")]
public Output<string?> Repository { get; private set; } = null!;
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Where the Compose file comes from. Valid values: `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Raw`.
/// </summary>
[Output("sourceType")]
public Output<string> SourceType { get; private set; } = null!;
/// <summary>
/// Suffix appended to generated resource names.
/// </summary>
[Output("suffix")]
public Output<string> Suffix { get; private set; } = null!;
/// <summary>
/// What triggers an automatic deployment. Valid values: `Push`, `Tag`.
/// </summary>
[Output("triggerType")]
public Output<string> TriggerType { get; private set; } = null!;
/// <summary>
/// Glob patterns that limit which changed paths trigger an automatic deployment.
/// </summary>
[Output("watchPaths")]
public Output<ImmutableArray<string>> WatchPaths { get; private set; } = null!;
/// <summary>
/// Create a Compose resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, ComposeState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/compose:Compose", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Compose resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Compose Get(string name, Input<string> id, ComposeState? state = null, CustomResourceOptions? options = null)
{
return new Compose(name, id, state, options);
}
}
public sealed class ComposeArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Deploy automatically when the configured trigger fires.
/// </summary>
[Input("autoDeploy")]
public Input<bool>? AutoDeploy { get; set; }
/// <summary>
/// Bitbucket branch to deploy.
/// </summary>
[Input("bitbucketBranch")]
public Input<string>? BitbucketBranch { get; set; }
/// <summary>
/// ID of the configured Bitbucket provider connection.
/// </summary>
[Input("bitbucketId")]
public Input<string>? BitbucketId { get; set; }
/// <summary>
/// Bitbucket repository owner.
/// </summary>
[Input("bitbucketOwner")]
public Input<string>? BitbucketOwner { get; set; }
/// <summary>
/// Bitbucket repository name.
/// </summary>
[Input("bitbucketRepository")]
public Input<string>? BitbucketRepository { get; set; }
/// <summary>
/// Bitbucket repository slug.
/// </summary>
[Input("bitbucketRepositorySlug")]
public Input<string>? BitbucketRepositorySlug { get; set; }
/// <summary>
/// GitHub branch to deploy.
/// </summary>
[Input("branch")]
public Input<string>? Branch { get; set; }
/// <summary>
/// Custom `docker compose` command to run.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Inline Compose file contents. Used when `SourceType` is `Raw`.
/// </summary>
[Input("composeFile")]
public Input<string>? ComposeFile { get; set; }
/// <summary>
/// Path to the Compose file within the repository.
/// </summary>
[Input("composePath")]
public Input<string>? ComposePath { get; set; }
/// <summary>
/// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `Stack`.
/// </summary>
[Input("composeType")]
public Input<string>? ComposeType { get; set; }
/// <summary>
/// Branch to deploy for a custom Git remote.
/// </summary>
[Input("customGitBranch")]
public Input<string>? CustomGitBranch { get; set; }
/// <summary>
/// SSH key used to clone a private custom Git remote.
/// </summary>
[Input("customGitSshKeyId")]
public Input<string>? CustomGitSshKeyId { get; set; }
/// <summary>
/// Git remote URL, when `SourceType` is `Git`.
/// </summary>
[Input("customGitUrl")]
public Input<string>? CustomGitUrl { get; set; }
/// <summary>
/// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `False`, which preserves the data.
/// </summary>
[Input("deleteVolumes")]
public Input<bool>? DeleteVolumes { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Clone Git submodules when checking out the repository.
/// </summary>
[Input("enableSubmodules")]
public Input<bool>? EnableSubmodules { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this stack belongs to.
/// </summary>
[Input("environmentId", required: true)]
public Input<string> EnvironmentId { get; set; } = null!;
/// <summary>
/// Gitea branch to deploy.
/// </summary>
[Input("giteaBranch")]
public Input<string>? GiteaBranch { get; set; }
/// <summary>
/// ID of the configured Gitea provider connection.
/// </summary>
[Input("giteaId")]
public Input<string>? GiteaId { get; set; }
/// <summary>
/// Gitea repository owner.
/// </summary>
[Input("giteaOwner")]
public Input<string>? GiteaOwner { get; set; }
/// <summary>
/// Gitea repository name.
/// </summary>
[Input("giteaRepository")]
public Input<string>? GiteaRepository { get; set; }
/// <summary>
/// ID of the configured GitHub provider connection.
/// </summary>
[Input("githubId")]
public Input<string>? GithubId { get; set; }
/// <summary>
/// GitLab branch to deploy.
/// </summary>
[Input("gitlabBranch")]
public Input<string>? GitlabBranch { get; set; }
/// <summary>
/// ID of the configured GitLab provider connection.
/// </summary>
[Input("gitlabId")]
public Input<string>? GitlabId { get; set; }
/// <summary>
/// GitLab repository owner.
/// </summary>
[Input("gitlabOwner")]
public Input<string>? GitlabOwner { get; set; }
/// <summary>
/// Full GitLab namespace path.
/// </summary>
[Input("gitlabPathNamespace")]
public Input<string>? GitlabPathNamespace { get; set; }
/// <summary>
/// Numeric GitLab project ID.
/// </summary>
[Input("gitlabProjectId")]
public Input<int>? GitlabProjectId { get; set; }
/// <summary>
/// GitLab repository name.
/// </summary>
[Input("gitlabRepository")]
public Input<string>? GitlabRepository { get; set; }
/// <summary>
/// Run the stack on its own isolated Docker network.
/// </summary>
[Input("isolatedDeployment")]
public Input<bool>? IsolatedDeployment { get; set; }
/// <summary>
/// Prefix volume names for isolated deployments. Retained for backwards compatibility.
/// </summary>
[Input("isolatedDeploymentsVolume")]
public Input<bool>? IsolatedDeploymentsVolume { get; set; }
/// <summary>
/// Display name of the stack.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// GitHub repository owner.
/// </summary>
[Input("owner")]
public Input<string>? Owner { get; set; }
/// <summary>
/// Append a random suffix to service and volume names.
/// </summary>
[Input("randomize")]
public Input<bool>? Randomize { get; set; }
/// <summary>
/// GitHub repository name.
/// </summary>
[Input("repository")]
public Input<string>? Repository { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Where the Compose file comes from. Valid values: `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Raw`.
/// </summary>
[Input("sourceType")]
public Input<string>? SourceType { get; set; }
/// <summary>
/// Suffix appended to generated resource names.
/// </summary>
[Input("suffix")]
public Input<string>? Suffix { get; set; }
/// <summary>
/// What triggers an automatic deployment. Valid values: `Push`, `Tag`.
/// </summary>
[Input("triggerType")]
public Input<string>? TriggerType { get; set; }
[Input("watchPaths")]
private InputList<string>? _watchPaths;
/// <summary>
/// Glob patterns that limit which changed paths trigger an automatic deployment.
/// </summary>
public InputList<string> WatchPaths
{
get => _watchPaths ?? (_watchPaths = new InputList<string>());
set => _watchPaths = value;
}
public ComposeArgs()
{
}
public static new ComposeArgs Empty => new ComposeArgs();
}
public sealed class ComposeState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker stack name. Generated by Dokploy when omitted. Changing it forces a new stack.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Deploy automatically when the configured trigger fires.
/// </summary>
[Input("autoDeploy")]
public Input<bool>? AutoDeploy { get; set; }
/// <summary>
/// Bitbucket branch to deploy.
/// </summary>
[Input("bitbucketBranch")]
public Input<string>? BitbucketBranch { get; set; }
/// <summary>
/// ID of the configured Bitbucket provider connection.
/// </summary>
[Input("bitbucketId")]
public Input<string>? BitbucketId { get; set; }
/// <summary>
/// Bitbucket repository owner.
/// </summary>
[Input("bitbucketOwner")]
public Input<string>? BitbucketOwner { get; set; }
/// <summary>
/// Bitbucket repository name.
/// </summary>
[Input("bitbucketRepository")]
public Input<string>? BitbucketRepository { get; set; }
/// <summary>
/// Bitbucket repository slug.
/// </summary>
[Input("bitbucketRepositorySlug")]
public Input<string>? BitbucketRepositorySlug { get; set; }
/// <summary>
/// GitHub branch to deploy.
/// </summary>
[Input("branch")]
public Input<string>? Branch { get; set; }
/// <summary>
/// Custom `docker compose` command to run.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Inline Compose file contents. Used when `SourceType` is `Raw`.
/// </summary>
[Input("composeFile")]
public Input<string>? ComposeFile { get; set; }
/// <summary>
/// Path to the Compose file within the repository.
/// </summary>
[Input("composePath")]
public Input<string>? ComposePath { get; set; }
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Input("composeStatus")]
public Input<string>? ComposeStatus { get; set; }
/// <summary>
/// Whether to run the stack with Docker Compose or Docker Swarm. Valid values: `docker-compose`, `Stack`.
/// </summary>
[Input("composeType")]
public Input<string>? ComposeType { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the stack was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Branch to deploy for a custom Git remote.
/// </summary>
[Input("customGitBranch")]
public Input<string>? CustomGitBranch { get; set; }
/// <summary>
/// SSH key used to clone a private custom Git remote.
/// </summary>
[Input("customGitSshKeyId")]
public Input<string>? CustomGitSshKeyId { get; set; }
/// <summary>
/// Git remote URL, when `SourceType` is `Git`.
/// </summary>
[Input("customGitUrl")]
public Input<string>? CustomGitUrl { get; set; }
/// <summary>
/// Whether to delete the stack's Docker volumes when this resource is destroyed. Defaults to `False`, which preserves the data.
/// </summary>
[Input("deleteVolumes")]
public Input<bool>? DeleteVolumes { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Clone Git submodules when checking out the repository.
/// </summary>
[Input("enableSubmodules")]
public Input<bool>? EnableSubmodules { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this stack belongs to.
/// </summary>
[Input("environmentId")]
public Input<string>? EnvironmentId { get; set; }
/// <summary>
/// Gitea branch to deploy.
/// </summary>
[Input("giteaBranch")]
public Input<string>? GiteaBranch { get; set; }
/// <summary>
/// ID of the configured Gitea provider connection.
/// </summary>
[Input("giteaId")]
public Input<string>? GiteaId { get; set; }
/// <summary>
/// Gitea repository owner.
/// </summary>
[Input("giteaOwner")]
public Input<string>? GiteaOwner { get; set; }
/// <summary>
/// Gitea repository name.
/// </summary>
[Input("giteaRepository")]
public Input<string>? GiteaRepository { get; set; }
/// <summary>
/// ID of the configured GitHub provider connection.
/// </summary>
[Input("githubId")]
public Input<string>? GithubId { get; set; }
/// <summary>
/// GitLab branch to deploy.
/// </summary>
[Input("gitlabBranch")]
public Input<string>? GitlabBranch { get; set; }
/// <summary>
/// ID of the configured GitLab provider connection.
/// </summary>
[Input("gitlabId")]
public Input<string>? GitlabId { get; set; }
/// <summary>
/// GitLab repository owner.
/// </summary>
[Input("gitlabOwner")]
public Input<string>? GitlabOwner { get; set; }
/// <summary>
/// Full GitLab namespace path.
/// </summary>
[Input("gitlabPathNamespace")]
public Input<string>? GitlabPathNamespace { get; set; }
/// <summary>
/// Numeric GitLab project ID.
/// </summary>
[Input("gitlabProjectId")]
public Input<int>? GitlabProjectId { get; set; }
/// <summary>
/// GitLab repository name.
/// </summary>
[Input("gitlabRepository")]
public Input<string>? GitlabRepository { get; set; }
/// <summary>
/// Run the stack on its own isolated Docker network.
/// </summary>
[Input("isolatedDeployment")]
public Input<bool>? IsolatedDeployment { get; set; }
/// <summary>
/// Prefix volume names for isolated deployments. Retained for backwards compatibility.
/// </summary>
[Input("isolatedDeploymentsVolume")]
public Input<bool>? IsolatedDeploymentsVolume { get; set; }
/// <summary>
/// Display name of the stack.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// GitHub repository owner.
/// </summary>
[Input("owner")]
public Input<string>? Owner { get; set; }
/// <summary>
/// Append a random suffix to service and volume names.
/// </summary>
[Input("randomize")]
public Input<bool>? Randomize { get; set; }
/// <summary>
/// GitHub repository name.
/// </summary>
[Input("repository")]
public Input<string>? Repository { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Where the Compose file comes from. Valid values: `Git`, `Github`, `Gitlab`, `Bitbucket`, `Gitea`, `Raw`.
/// </summary>
[Input("sourceType")]
public Input<string>? SourceType { get; set; }
/// <summary>
/// Suffix appended to generated resource names.
/// </summary>
[Input("suffix")]
public Input<string>? Suffix { get; set; }
/// <summary>
/// What triggers an automatic deployment. Valid values: `Push`, `Tag`.
/// </summary>
[Input("triggerType")]
public Input<string>? TriggerType { get; set; }
[Input("watchPaths")]
private InputList<string>? _watchPaths;
/// <summary>
/// Glob patterns that limit which changed paths trigger an automatic deployment.
/// </summary>
public InputList<string> WatchPaths
{
get => _watchPaths ?? (_watchPaths = new InputList<string>());
set => _watchPaths = value;
}
public ComposeState()
{
}
public static new ComposeState Empty => new ComposeState();
}
}

76
sdk/dotnet/Config/Config.cs generated Normal file
View File

@@ -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<T>
{
private readonly Func<T> _getter;
private T _value = default!;
private bool _set;
public __Value(Func<T> 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<string?> _apiKey = new __Value<string?>(() => __config.Get("apiKey") ?? Utilities.GetEnv("DOKPLOY_API_KEY"));
/// <summary>
/// API token generated in Dokploy under *Settings &gt; Profile &gt; API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable.
/// </summary>
public static string? ApiKey
{
get => _apiKey.Get();
set => _apiKey.Set(value);
}
private static readonly __Value<string?> _host = new __Value<string?>(() => __config.Get("host") ?? Utilities.GetEnv("DOKPLOY_HOST"));
/// <summary>
/// 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.
/// </summary>
public static string? Host
{
get => _host.Get();
set => _host.Set(value);
}
private static readonly __Value<bool?> _insecureSkipVerify = new __Value<bool?>(() => __config.GetBoolean("insecureSkipVerify"));
/// <summary>
/// Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `False`.
/// </summary>
public static bool? InsecureSkipVerify
{
get => _insecureSkipVerify.Get();
set => _insecureSkipVerify.Set(value);
}
private static readonly __Value<int?> _timeoutSeconds = new __Value<int?>(() => __config.GetInt32("timeoutSeconds") ?? Utilities.GetEnvInt32("DOKPLOY_TIMEOUT_SECONDS"));
/// <summary>
/// Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable.
/// </summary>
public static int? TimeoutSeconds
{
get => _timeoutSeconds.Get();
set => _timeoutSeconds.Set(value);
}
}
}

1
sdk/dotnet/Config/README.md generated Normal file
View File

@@ -0,0 +1 @@
A Pulumi package for creating and managing Dokploy resources

286
sdk/dotnet/Destination.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// S3 access key ID.
/// </summary>
[Output("accessKey")]
public Output<string> AccessKey { get; private set; } = null!;
/// <summary>
/// Extra flags passed to the underlying `Rclone` invocation.
/// </summary>
[Output("additionalFlags")]
public Output<ImmutableArray<string>> AdditionalFlags { get; private set; } = null!;
/// <summary>
/// Bucket name.
/// </summary>
[Output("bucket")]
public Output<string> Bucket { get; private set; } = null!;
/// <summary>
/// Timestamp of when the destination was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// S3 endpoint URL.
/// </summary>
[Output("endpoint")]
public Output<string> Endpoint { get; private set; } = null!;
/// <summary>
/// Display name of the destination.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// Provider label, for example `S3` or `Cloudflare`. Named `ProviderName` because `Provider` is reserved by Terraform.
/// </summary>
[Output("providerName")]
public Output<string?> ProviderName { get; private set; } = null!;
/// <summary>
/// Bucket region, for example `us-east-1`.
/// </summary>
[Output("region")]
public Output<string> Region { get; private set; } = null!;
/// <summary>
/// S3 secret access key.
/// </summary>
[Output("secretAccessKey")]
public Output<string> SecretAccessKey { get; private set; } = null!;
/// <summary>
/// Server this destination is scoped to.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Create a Destination resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, DestinationState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/destination:Destination", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Destination resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Destination Get(string name, Input<string> id, DestinationState? state = null, CustomResourceOptions? options = null)
{
return new Destination(name, id, state, options);
}
}
public sealed class DestinationArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// S3 access key ID.
/// </summary>
[Input("accessKey", required: true)]
public Input<string> AccessKey { get; set; } = null!;
[Input("additionalFlags")]
private InputList<string>? _additionalFlags;
/// <summary>
/// Extra flags passed to the underlying `Rclone` invocation.
/// </summary>
public InputList<string> AdditionalFlags
{
get => _additionalFlags ?? (_additionalFlags = new InputList<string>());
set => _additionalFlags = value;
}
/// <summary>
/// Bucket name.
/// </summary>
[Input("bucket", required: true)]
public Input<string> Bucket { get; set; } = null!;
/// <summary>
/// S3 endpoint URL.
/// </summary>
[Input("endpoint", required: true)]
public Input<string> Endpoint { get; set; } = null!;
/// <summary>
/// Display name of the destination.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// Provider label, for example `S3` or `Cloudflare`. Named `ProviderName` because `Provider` is reserved by Terraform.
/// </summary>
[Input("providerName")]
public Input<string>? ProviderName { get; set; }
/// <summary>
/// Bucket region, for example `us-east-1`.
/// </summary>
[Input("region", required: true)]
public Input<string> Region { get; set; } = null!;
[Input("secretAccessKey", required: true)]
private Input<string>? _secretAccessKey;
/// <summary>
/// S3 secret access key.
/// </summary>
public Input<string>? SecretAccessKey
{
get => _secretAccessKey;
set
{
var emptySecret = Output.CreateSecret(0);
_secretAccessKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Server this destination is scoped to.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
public DestinationArgs()
{
}
public static new DestinationArgs Empty => new DestinationArgs();
}
public sealed class DestinationState : global::Pulumi.ResourceArgs
{
/// <summary>
/// S3 access key ID.
/// </summary>
[Input("accessKey")]
public Input<string>? AccessKey { get; set; }
[Input("additionalFlags")]
private InputList<string>? _additionalFlags;
/// <summary>
/// Extra flags passed to the underlying `Rclone` invocation.
/// </summary>
public InputList<string> AdditionalFlags
{
get => _additionalFlags ?? (_additionalFlags = new InputList<string>());
set => _additionalFlags = value;
}
/// <summary>
/// Bucket name.
/// </summary>
[Input("bucket")]
public Input<string>? Bucket { get; set; }
/// <summary>
/// Timestamp of when the destination was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// S3 endpoint URL.
/// </summary>
[Input("endpoint")]
public Input<string>? Endpoint { get; set; }
/// <summary>
/// Display name of the destination.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// Provider label, for example `S3` or `Cloudflare`. Named `ProviderName` because `Provider` is reserved by Terraform.
/// </summary>
[Input("providerName")]
public Input<string>? ProviderName { get; set; }
/// <summary>
/// Bucket region, for example `us-east-1`.
/// </summary>
[Input("region")]
public Input<string>? Region { get; set; }
[Input("secretAccessKey")]
private Input<string>? _secretAccessKey;
/// <summary>
/// S3 secret access key.
/// </summary>
public Input<string>? SecretAccessKey
{
get => _secretAccessKey;
set
{
var emptySecret = Output.CreateSecret(0);
_secretAccessKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Server this destination is scoped to.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
public DestinationState()
{
}
public static new DestinationState Empty => new DestinationState();
}
}

388
sdk/dotnet/Domain.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Application this domain routes to.
/// </summary>
[Output("applicationId")]
public Output<string?> ApplicationId { get; private set; } = null!;
/// <summary>
/// How TLS certificates are obtained. Use `Letsencrypt` for automatic certificates. Valid values: `Letsencrypt`, `None`, `Custom`.
/// </summary>
[Output("certificateType")]
public Output<string> CertificateType { get; private set; } = null!;
/// <summary>
/// Compose stack this domain routes to.
/// </summary>
[Output("composeId")]
public Output<string?> ComposeId { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the domain was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Traefik certificate resolver name, when `CertificateType` is `Custom`.
/// </summary>
[Output("customCertResolver")]
public Output<string?> CustomCertResolver { get; private set; } = null!;
/// <summary>
/// Traefik entrypoint to bind, when not using the defaults.
/// </summary>
[Output("customEntrypoint")]
public Output<string?> CustomEntrypoint { get; private set; } = null!;
/// <summary>
/// What kind of target this domain points at. Valid values: `Compose`, `Application`, `Preview`.
/// </summary>
[Output("domainType")]
public Output<string> DomainType { get; private set; } = null!;
/// <summary>
/// Protect this domain with Dokploy's forward auth.
/// </summary>
[Output("forwardAuthEnabled")]
public Output<bool> ForwardAuthEnabled { get; private set; } = null!;
/// <summary>
/// Fully-qualified hostname, for example `api.example.com`.
/// </summary>
[Output("host")]
public Output<string> Host { get; private set; } = null!;
/// <summary>
/// Serve the domain over HTTPS and redirect HTTP traffic to it.
/// </summary>
[Output("https")]
public Output<bool> Https { get; private set; } = null!;
/// <summary>
/// Path the request is rewritten to before it reaches the container, defaults to `/`.
/// </summary>
[Output("internalPath")]
public Output<string> InternalPath { get; private set; } = null!;
/// <summary>
/// Names of Traefik middlewares to apply.
/// </summary>
[Output("middlewares")]
public Output<ImmutableArray<string>> Middlewares { get; private set; } = null!;
/// <summary>
/// Path prefix this domain routes, defaults to `/`.
/// </summary>
[Output("path")]
public Output<string> Path { get; private set; } = null!;
/// <summary>
/// Container port that receives the traffic, defaults to `3000`.
/// </summary>
[Output("port")]
public Output<int> Port { get; private set; } = null!;
/// <summary>
/// Preview deployment this domain routes to.
/// </summary>
[Output("previewDeploymentId")]
public Output<string?> PreviewDeploymentId { get; private set; } = null!;
/// <summary>
/// Name of the service inside a Compose stack that receives the traffic. Required when `ComposeId` is set.
/// </summary>
[Output("serviceName")]
public Output<string?> ServiceName { get; private set; } = null!;
/// <summary>
/// Strip `Path` from the request before forwarding it.
/// </summary>
[Output("stripPath")]
public Output<bool> StripPath { get; private set; } = null!;
/// <summary>
/// Create a Domain resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, DomainState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/domain:Domain", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Domain resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Domain Get(string name, Input<string> id, DomainState? state = null, CustomResourceOptions? options = null)
{
return new Domain(name, id, state, options);
}
}
public sealed class DomainArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application this domain routes to.
/// </summary>
[Input("applicationId")]
public Input<string>? ApplicationId { get; set; }
/// <summary>
/// How TLS certificates are obtained. Use `Letsencrypt` for automatic certificates. Valid values: `Letsencrypt`, `None`, `Custom`.
/// </summary>
[Input("certificateType")]
public Input<string>? CertificateType { get; set; }
/// <summary>
/// Compose stack this domain routes to.
/// </summary>
[Input("composeId")]
public Input<string>? ComposeId { get; set; }
/// <summary>
/// Traefik certificate resolver name, when `CertificateType` is `Custom`.
/// </summary>
[Input("customCertResolver")]
public Input<string>? CustomCertResolver { get; set; }
/// <summary>
/// Traefik entrypoint to bind, when not using the defaults.
/// </summary>
[Input("customEntrypoint")]
public Input<string>? CustomEntrypoint { get; set; }
/// <summary>
/// What kind of target this domain points at. Valid values: `Compose`, `Application`, `Preview`.
/// </summary>
[Input("domainType")]
public Input<string>? DomainType { get; set; }
/// <summary>
/// Protect this domain with Dokploy's forward auth.
/// </summary>
[Input("forwardAuthEnabled")]
public Input<bool>? ForwardAuthEnabled { get; set; }
/// <summary>
/// Fully-qualified hostname, for example `api.example.com`.
/// </summary>
[Input("host", required: true)]
public Input<string> Host { get; set; } = null!;
/// <summary>
/// Serve the domain over HTTPS and redirect HTTP traffic to it.
/// </summary>
[Input("https")]
public Input<bool>? Https { get; set; }
/// <summary>
/// Path the request is rewritten to before it reaches the container, defaults to `/`.
/// </summary>
[Input("internalPath")]
public Input<string>? InternalPath { get; set; }
[Input("middlewares")]
private InputList<string>? _middlewares;
/// <summary>
/// Names of Traefik middlewares to apply.
/// </summary>
public InputList<string> Middlewares
{
get => _middlewares ?? (_middlewares = new InputList<string>());
set => _middlewares = value;
}
/// <summary>
/// Path prefix this domain routes, defaults to `/`.
/// </summary>
[Input("path")]
public Input<string>? Path { get; set; }
/// <summary>
/// Container port that receives the traffic, defaults to `3000`.
/// </summary>
[Input("port")]
public Input<int>? Port { get; set; }
/// <summary>
/// Preview deployment this domain routes to.
/// </summary>
[Input("previewDeploymentId")]
public Input<string>? PreviewDeploymentId { get; set; }
/// <summary>
/// Name of the service inside a Compose stack that receives the traffic. Required when `ComposeId` is set.
/// </summary>
[Input("serviceName")]
public Input<string>? ServiceName { get; set; }
/// <summary>
/// Strip `Path` from the request before forwarding it.
/// </summary>
[Input("stripPath")]
public Input<bool>? StripPath { get; set; }
public DomainArgs()
{
}
public static new DomainArgs Empty => new DomainArgs();
}
public sealed class DomainState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application this domain routes to.
/// </summary>
[Input("applicationId")]
public Input<string>? ApplicationId { get; set; }
/// <summary>
/// How TLS certificates are obtained. Use `Letsencrypt` for automatic certificates. Valid values: `Letsencrypt`, `None`, `Custom`.
/// </summary>
[Input("certificateType")]
public Input<string>? CertificateType { get; set; }
/// <summary>
/// Compose stack this domain routes to.
/// </summary>
[Input("composeId")]
public Input<string>? ComposeId { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the domain was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Traefik certificate resolver name, when `CertificateType` is `Custom`.
/// </summary>
[Input("customCertResolver")]
public Input<string>? CustomCertResolver { get; set; }
/// <summary>
/// Traefik entrypoint to bind, when not using the defaults.
/// </summary>
[Input("customEntrypoint")]
public Input<string>? CustomEntrypoint { get; set; }
/// <summary>
/// What kind of target this domain points at. Valid values: `Compose`, `Application`, `Preview`.
/// </summary>
[Input("domainType")]
public Input<string>? DomainType { get; set; }
/// <summary>
/// Protect this domain with Dokploy's forward auth.
/// </summary>
[Input("forwardAuthEnabled")]
public Input<bool>? ForwardAuthEnabled { get; set; }
/// <summary>
/// Fully-qualified hostname, for example `api.example.com`.
/// </summary>
[Input("host")]
public Input<string>? Host { get; set; }
/// <summary>
/// Serve the domain over HTTPS and redirect HTTP traffic to it.
/// </summary>
[Input("https")]
public Input<bool>? Https { get; set; }
/// <summary>
/// Path the request is rewritten to before it reaches the container, defaults to `/`.
/// </summary>
[Input("internalPath")]
public Input<string>? InternalPath { get; set; }
[Input("middlewares")]
private InputList<string>? _middlewares;
/// <summary>
/// Names of Traefik middlewares to apply.
/// </summary>
public InputList<string> Middlewares
{
get => _middlewares ?? (_middlewares = new InputList<string>());
set => _middlewares = value;
}
/// <summary>
/// Path prefix this domain routes, defaults to `/`.
/// </summary>
[Input("path")]
public Input<string>? Path { get; set; }
/// <summary>
/// Container port that receives the traffic, defaults to `3000`.
/// </summary>
[Input("port")]
public Input<int>? Port { get; set; }
/// <summary>
/// Preview deployment this domain routes to.
/// </summary>
[Input("previewDeploymentId")]
public Input<string>? PreviewDeploymentId { get; set; }
/// <summary>
/// Name of the service inside a Compose stack that receives the traffic. Required when `ComposeId` is set.
/// </summary>
[Input("serviceName")]
public Input<string>? ServiceName { get; set; }
/// <summary>
/// Strip `Path` from the request before forwarding it.
/// </summary>
[Input("stripPath")]
public Input<bool>? StripPath { get; set; }
public DomainState()
{
}
public static new DomainState Empty => new DomainState();
}
}

172
sdk/dotnet/Environment.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// RFC 3339 timestamp of when the environment was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment.
/// </summary>
[Output("env")]
public Output<string> Env { get; private set; } = null!;
/// <summary>
/// Whether this is the project's default environment.
/// </summary>
[Output("isDefault")]
public Output<bool> IsDefault { get; private set; } = null!;
/// <summary>
/// Environment name, for example `Staging`.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// Project this environment belongs to.
/// </summary>
[Output("projectId")]
public Output<string> ProjectId { get; private set; } = null!;
/// <summary>
/// Create a Environment resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, EnvironmentState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/environment:Environment", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Environment resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Environment Get(string name, Input<string> id, EnvironmentState? state = null, CustomResourceOptions? options = null)
{
return new Environment(name, id, state, options);
}
}
public sealed class EnvironmentArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment name, for example `Staging`.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// Project this environment belongs to.
/// </summary>
[Input("projectId", required: true)]
public Input<string> ProjectId { get; set; } = null!;
public EnvironmentArgs()
{
}
public static new EnvironmentArgs Empty => new EnvironmentArgs();
}
public sealed class EnvironmentState : global::Pulumi.ResourceArgs
{
/// <summary>
/// RFC 3339 timestamp of when the environment was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Environment-wide variables in `KEY=value` format, one per line. These are merged into every service in this environment.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Whether this is the project's default environment.
/// </summary>
[Input("isDefault")]
public Input<bool>? IsDefault { get; set; }
/// <summary>
/// Environment name, for example `Staging`.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// Project this environment belongs to.
/// </summary>
[Input("projectId")]
public Input<string>? ProjectId { get; set; }
public EnvironmentState()
{
}
public static new EnvironmentState Empty => new EnvironmentState();
}
}

93
sdk/dotnet/GetApplication.cs generated Normal file
View File

@@ -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<GetApplicationResult> InvokeAsync(GetApplicationArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.InvokeAsync<GetApplicationResult>("dokploy:index/getApplication:getApplication", args ?? new GetApplicationArgs(), options.WithDefaults());
public static Output<GetApplicationResult> Invoke(GetApplicationInvokeArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.Invoke<GetApplicationResult>("dokploy:index/getApplication:getApplication", args ?? new GetApplicationInvokeArgs(), options.WithDefaults());
public static Output<GetApplicationResult> Invoke(GetApplicationInvokeArgs args, InvokeOutputOptions options)
=> global::Pulumi.Deployment.Instance.Invoke<GetApplicationResult>("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<string> 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;
}
}
}

85
sdk/dotnet/GetEnvironment.cs generated Normal file
View File

@@ -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<GetEnvironmentResult> InvokeAsync(GetEnvironmentArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.InvokeAsync<GetEnvironmentResult>("dokploy:index/getEnvironment:getEnvironment", args ?? new GetEnvironmentArgs(), options.WithDefaults());
public static Output<GetEnvironmentResult> Invoke(GetEnvironmentInvokeArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.Invoke<GetEnvironmentResult>("dokploy:index/getEnvironment:getEnvironment", args ?? new GetEnvironmentInvokeArgs(), options.WithDefaults());
public static Output<GetEnvironmentResult> Invoke(GetEnvironmentInvokeArgs args, InvokeOutputOptions options)
=> global::Pulumi.Deployment.Instance.Invoke<GetEnvironmentResult>("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<string> 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;
}
}
}

89
sdk/dotnet/GetProject.cs generated Normal file
View File

@@ -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<GetProjectResult> InvokeAsync(GetProjectArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.InvokeAsync<GetProjectResult>("dokploy:index/getProject:getProject", args ?? new GetProjectArgs(), options.WithDefaults());
public static Output<GetProjectResult> Invoke(GetProjectInvokeArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.Invoke<GetProjectResult>("dokploy:index/getProject:getProject", args ?? new GetProjectInvokeArgs(), options.WithDefaults());
public static Output<GetProjectResult> Invoke(GetProjectInvokeArgs args, InvokeOutputOptions options)
=> global::Pulumi.Deployment.Instance.Invoke<GetProjectResult>("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<string> 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<Outputs.GetProjectEnvironmentResult> 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<Outputs.GetProjectEnvironmentResult> environments,
string id,
string name,
string organizationId)
{
CreatedAt = createdAt;
DefaultEnvironmentId = defaultEnvironmentId;
Description = description;
Env = env;
Environments = environments;
Id = id;
Name = name;
OrganizationId = organizationId;
}
}
}

37
sdk/dotnet/GetProjects.cs generated Normal file
View File

@@ -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<GetProjectsResult> InvokeAsync(InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.InvokeAsync<GetProjectsResult>("dokploy:index/getProjects:getProjects", InvokeArgs.Empty, options.WithDefaults());
public static Output<GetProjectsResult> Invoke(InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.Invoke<GetProjectsResult>("dokploy:index/getProjects:getProjects", InvokeArgs.Empty, options.WithDefaults());
public static Output<GetProjectsResult> Invoke(InvokeOutputOptions options)
=> global::Pulumi.Deployment.Instance.Invoke<GetProjectsResult>("dokploy:index/getProjects:getProjects", InvokeArgs.Empty, options.WithDefaults());
}
[OutputType]
public sealed class GetProjectsResult
{
public readonly ImmutableArray<Outputs.GetProjectsProjectResult> Projects;
[OutputConstructor]
private GetProjectsResult(ImmutableArray<Outputs.GetProjectsProjectResult> projects)
{
Projects = projects;
}
}
}

37
sdk/dotnet/GetServers.cs generated Normal file
View File

@@ -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<GetServersResult> InvokeAsync(InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.InvokeAsync<GetServersResult>("dokploy:index/getServers:getServers", InvokeArgs.Empty, options.WithDefaults());
public static Output<GetServersResult> Invoke(InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.Invoke<GetServersResult>("dokploy:index/getServers:getServers", InvokeArgs.Empty, options.WithDefaults());
public static Output<GetServersResult> Invoke(InvokeOutputOptions options)
=> global::Pulumi.Deployment.Instance.Invoke<GetServersResult>("dokploy:index/getServers:getServers", InvokeArgs.Empty, options.WithDefaults());
}
[OutputType]
public sealed class GetServersResult
{
public readonly ImmutableArray<Outputs.GetServersServerResult> Servers;
[OutputConstructor]
private GetServersResult(ImmutableArray<Outputs.GetServersServerResult> servers)
{
Servers = servers;
}
}
}

356
sdk/dotnet/LICENSE generated Normal file
View File

@@ -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 Contributors 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 partys
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
partys 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 partys 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.

745
sdk/dotnet/MariaDb.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Output("appName")]
public Output<string> AppName { get; private set; } = null!;
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Output("applicationStatus")]
public Output<string> ApplicationStatus { get; private set; } = null!;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
[Output("args")]
public Output<ImmutableArray<string>> Args { get; private set; } = null!;
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Output("command")]
public Output<string?> Command { get; private set; } = null!;
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Output("cpuLimit")]
public Output<string?> CpuLimit { get; private set; } = null!;
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Output("cpuReservation")]
public Output<string?> CpuReservation { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Name of the database to create.
/// </summary>
[Output("databaseName")]
public Output<string> DatabaseName { get; private set; } = null!;
/// <summary>
/// Password for the database user.
/// </summary>
[Output("databasePassword")]
public Output<string> DatabasePassword { get; private set; } = null!;
/// <summary>
/// Password for the MariaDB `Root` user.
/// </summary>
[Output("databaseRootPassword")]
public Output<string> DatabaseRootPassword { get; private set; } = null!;
/// <summary>
/// Database user to create.
/// </summary>
[Output("databaseUser")]
public Output<string> DatabaseUser { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Output("detachDokployNetwork")]
public Output<bool> DetachDokployNetwork { get; private set; } = null!;
/// <summary>
/// MariaDB image to run, for example `mariadb:11`.
/// </summary>
[Output("dockerImage")]
public Output<string> DockerImage { get; private set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Output("endpointSpecSwarm")]
public Output<string?> EndpointSpecSwarm { get; private set; } = null!;
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Output("env")]
public Output<string?> Env { get; private set; } = null!;
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Output("environmentId")]
public Output<string> EnvironmentId { get; private set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Output("externalPort")]
public Output<int?> ExternalPort { get; private set; } = null!;
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Output("healthCheckSwarm")]
public Output<string?> HealthCheckSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Output("labelsSwarm")]
public Output<string?> LabelsSwarm { get; private set; } = null!;
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Output("memoryLimit")]
public Output<string?> MemoryLimit { get; private set; } = null!;
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Output("memoryReservation")]
public Output<string?> MemoryReservation { get; private set; } = null!;
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Output("modeSwarm")]
public Output<string?> ModeSwarm { get; private set; } = null!;
/// <summary>
/// Display name of the database.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
[Output("networkIds")]
public Output<ImmutableArray<string>> NetworkIds { get; private set; } = null!;
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Output("networkSwarm")]
public Output<string?> NetworkSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Output("placementSwarm")]
public Output<string?> PlacementSwarm { get; private set; } = null!;
/// <summary>
/// Number of replicas to run.
/// </summary>
[Output("replicas")]
public Output<int> Replicas { get; private set; } = null!;
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Output("restartPolicySwarm")]
public Output<string?> RestartPolicySwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Output("rollbackConfigSwarm")]
public Output<string?> RollbackConfigSwarm { get; private set; } = null!;
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Output("stopGracePeriodSwarm")]
public Output<int?> StopGracePeriodSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Output("ulimitsSwarm")]
public Output<string?> UlimitsSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Output("updateConfigSwarm")]
public Output<string?> UpdateConfigSwarm { get; private set; } = null!;
/// <summary>
/// Create a MariaDb resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, MariaDbState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/mariaDb:MariaDb", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing MariaDb resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static MariaDb Get(string name, Input<string> id, MariaDbState? state = null, CustomResourceOptions? options = null)
{
return new MariaDb(name, id, state, options);
}
}
public sealed class MariaDbArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// Name of the database to create.
/// </summary>
[Input("databaseName", required: true)]
public Input<string> DatabaseName { get; set; } = null!;
[Input("databasePassword", required: true)]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the database user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
[Input("databaseRootPassword", required: true)]
private Input<string>? _databaseRootPassword;
/// <summary>
/// Password for the MariaDB `Root` user.
/// </summary>
public Input<string>? DatabaseRootPassword
{
get => _databaseRootPassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databaseRootPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Database user to create.
/// </summary>
[Input("databaseUser", required: true)]
public Input<string> DatabaseUser { get; set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// MariaDB image to run, for example `mariadb:11`.
/// </summary>
[Input("dockerImage", required: true)]
public Input<string> DockerImage { get; set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId", required: true)]
public Input<string> EnvironmentId { get; set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public MariaDbArgs()
{
}
public static new MariaDbArgs Empty => new MariaDbArgs();
}
public sealed class MariaDbState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Input("applicationStatus")]
public Input<string>? ApplicationStatus { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Name of the database to create.
/// </summary>
[Input("databaseName")]
public Input<string>? DatabaseName { get; set; }
[Input("databasePassword")]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the database user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
[Input("databaseRootPassword")]
private Input<string>? _databaseRootPassword;
/// <summary>
/// Password for the MariaDB `Root` user.
/// </summary>
public Input<string>? DatabaseRootPassword
{
get => _databaseRootPassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databaseRootPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Database user to create.
/// </summary>
[Input("databaseUser")]
public Input<string>? DatabaseUser { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// MariaDB image to run, for example `mariadb:11`.
/// </summary>
[Input("dockerImage")]
public Input<string>? DockerImage { get; set; }
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId")]
public Input<string>? EnvironmentId { get; set; }
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public MariaDbState()
{
}
public static new MariaDbState Empty => new MariaDbState();
}
}

61
sdk/dotnet/Maxvojtkov.Dokploy.csproj generated Normal file
View File

@@ -0,0 +1,61 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>maxvojtkov</Authors>
<Company>maxvojtkov</Company>
<Description>A Pulumi package for creating and managing Dokploy resources</Description>
<PackageLicenseExpression>MPL-2.0</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/maxvojtkov/pulumi-dokploy</PackageProjectUrl>
<RepositoryUrl>https://github.com/maxvojtkov/pulumi-dokploy</RepositoryUrl>
<PackageIcon>logo.png</PackageIcon>
<Version>0.1.0</Version>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>1701;1702;1591</NoWarn>
</PropertyGroup>
<PropertyGroup>
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
</PropertyGroup>
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="version.txt" />
<None Include="version.txt" Pack="True" PackagePath="content" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="pulumi-plugin.json" />
<None Include="pulumi-plugin.json" Pack="True" PackagePath="content" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Pulumi" Version="3.*" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
<ItemGroup>
<None Include="logo.png">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
</ItemGroup>
</Project>

706
sdk/dotnet/Mongo.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Output("appName")]
public Output<string> AppName { get; private set; } = null!;
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Output("applicationStatus")]
public Output<string> ApplicationStatus { get; private set; } = null!;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
[Output("args")]
public Output<ImmutableArray<string>> Args { get; private set; } = null!;
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Output("command")]
public Output<string?> Command { get; private set; } = null!;
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Output("cpuLimit")]
public Output<string?> CpuLimit { get; private set; } = null!;
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Output("cpuReservation")]
public Output<string?> CpuReservation { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Password for the root user.
/// </summary>
[Output("databasePassword")]
public Output<string> DatabasePassword { get; private set; } = null!;
/// <summary>
/// Root username to create.
/// </summary>
[Output("databaseUser")]
public Output<string> DatabaseUser { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Output("detachDokployNetwork")]
public Output<bool> DetachDokployNetwork { get; private set; } = null!;
/// <summary>
/// MongoDB image to run. Defaults to `mongo:8`.
/// </summary>
[Output("dockerImage")]
public Output<string> DockerImage { get; private set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Output("endpointSpecSwarm")]
public Output<string?> EndpointSpecSwarm { get; private set; } = null!;
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Output("env")]
public Output<string?> Env { get; private set; } = null!;
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Output("environmentId")]
public Output<string> EnvironmentId { get; private set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Output("externalPort")]
public Output<int?> ExternalPort { get; private set; } = null!;
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Output("healthCheckSwarm")]
public Output<string?> HealthCheckSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Output("labelsSwarm")]
public Output<string?> LabelsSwarm { get; private set; } = null!;
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Output("memoryLimit")]
public Output<string?> MemoryLimit { get; private set; } = null!;
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Output("memoryReservation")]
public Output<string?> MemoryReservation { get; private set; } = null!;
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Output("modeSwarm")]
public Output<string?> ModeSwarm { get; private set; } = null!;
/// <summary>
/// Display name of the database.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
[Output("networkIds")]
public Output<ImmutableArray<string>> NetworkIds { get; private set; } = null!;
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Output("networkSwarm")]
public Output<string?> NetworkSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Output("placementSwarm")]
public Output<string?> PlacementSwarm { get; private set; } = null!;
/// <summary>
/// Start the instance as a single-node replica set.
/// </summary>
[Output("replicaSets")]
public Output<bool> ReplicaSets { get; private set; } = null!;
/// <summary>
/// Number of replicas to run.
/// </summary>
[Output("replicas")]
public Output<int> Replicas { get; private set; } = null!;
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Output("restartPolicySwarm")]
public Output<string?> RestartPolicySwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Output("rollbackConfigSwarm")]
public Output<string?> RollbackConfigSwarm { get; private set; } = null!;
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Output("stopGracePeriodSwarm")]
public Output<int?> StopGracePeriodSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Output("ulimitsSwarm")]
public Output<string?> UlimitsSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Output("updateConfigSwarm")]
public Output<string?> UpdateConfigSwarm { get; private set; } = null!;
/// <summary>
/// Create a Mongo resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, MongoState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/mongo:Mongo", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Mongo resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Mongo Get(string name, Input<string> id, MongoState? state = null, CustomResourceOptions? options = null)
{
return new Mongo(name, id, state, options);
}
}
public sealed class MongoArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
[Input("databasePassword", required: true)]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the root user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Root username to create.
/// </summary>
[Input("databaseUser", required: true)]
public Input<string> DatabaseUser { get; set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// MongoDB image to run. Defaults to `mongo:8`.
/// </summary>
[Input("dockerImage")]
public Input<string>? DockerImage { get; set; }
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId", required: true)]
public Input<string> EnvironmentId { get; set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Start the instance as a single-node replica set.
/// </summary>
[Input("replicaSets")]
public Input<bool>? ReplicaSets { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public MongoArgs()
{
}
public static new MongoArgs Empty => new MongoArgs();
}
public sealed class MongoState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Input("applicationStatus")]
public Input<string>? ApplicationStatus { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
[Input("databasePassword")]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the root user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Root username to create.
/// </summary>
[Input("databaseUser")]
public Input<string>? DatabaseUser { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// MongoDB image to run. Defaults to `mongo:8`.
/// </summary>
[Input("dockerImage")]
public Input<string>? DockerImage { get; set; }
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId")]
public Input<string>? EnvironmentId { get; set; }
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Start the instance as a single-node replica set.
/// </summary>
[Input("replicaSets")]
public Input<bool>? ReplicaSets { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public MongoState()
{
}
public static new MongoState Empty => new MongoState();
}
}

220
sdk/dotnet/Mount.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Contents of the generated file, when `Type` is `File`.
/// </summary>
[Output("content")]
public Output<string?> Content { get; private set; } = null!;
/// <summary>
/// Path of the generated file, when `Type` is `File`.
/// </summary>
[Output("filePath")]
public Output<string?> FilePath { get; private set; } = null!;
/// <summary>
/// Path on the host, when `Type` is `Bind`.
/// </summary>
[Output("hostPath")]
public Output<string?> HostPath { get; private set; } = null!;
/// <summary>
/// Path inside the container where the mount appears.
/// </summary>
[Output("mountPath")]
public Output<string> MountPath { get; private set; } = null!;
/// <summary>
/// ID of the service this mount attaches to. Must match `ServiceType` — an application ID, a compose ID, a postgres ID, and so on.
/// </summary>
[Output("serviceId")]
public Output<string> ServiceId { get; private set; } = null!;
/// <summary>
/// The kind of service this mount attaches to. Valid values: `Application`, `Postgres`, `Mysql`, `Mariadb`, `Mongo`, `Redis`, `Compose`.
/// </summary>
[Output("serviceType")]
public Output<string> ServiceType { get; private set; } = null!;
/// <summary>
/// The kind of mount to create. Valid values: `Bind`, `Volume`, `File`.
/// </summary>
[Output("type")]
public Output<string> Type { get; private set; } = null!;
/// <summary>
/// Name of the Docker volume, when `Type` is `Volume`.
/// </summary>
[Output("volumeName")]
public Output<string?> VolumeName { get; private set; } = null!;
/// <summary>
/// Create a Mount resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, MountState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/mount:Mount", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Mount resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Mount Get(string name, Input<string> id, MountState? state = null, CustomResourceOptions? options = null)
{
return new Mount(name, id, state, options);
}
}
public sealed class MountArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Contents of the generated file, when `Type` is `File`.
/// </summary>
[Input("content")]
public Input<string>? Content { get; set; }
/// <summary>
/// Path of the generated file, when `Type` is `File`.
/// </summary>
[Input("filePath")]
public Input<string>? FilePath { get; set; }
/// <summary>
/// Path on the host, when `Type` is `Bind`.
/// </summary>
[Input("hostPath")]
public Input<string>? HostPath { get; set; }
/// <summary>
/// Path inside the container where the mount appears.
/// </summary>
[Input("mountPath", required: true)]
public Input<string> MountPath { get; set; } = null!;
/// <summary>
/// ID of the service this mount attaches to. Must match `ServiceType` — an application ID, a compose ID, a postgres ID, and so on.
/// </summary>
[Input("serviceId", required: true)]
public Input<string> ServiceId { get; set; } = null!;
/// <summary>
/// The kind of service this mount attaches to. Valid values: `Application`, `Postgres`, `Mysql`, `Mariadb`, `Mongo`, `Redis`, `Compose`.
/// </summary>
[Input("serviceType", required: true)]
public Input<string> ServiceType { get; set; } = null!;
/// <summary>
/// The kind of mount to create. Valid values: `Bind`, `Volume`, `File`.
/// </summary>
[Input("type", required: true)]
public Input<string> Type { get; set; } = null!;
/// <summary>
/// Name of the Docker volume, when `Type` is `Volume`.
/// </summary>
[Input("volumeName")]
public Input<string>? VolumeName { get; set; }
public MountArgs()
{
}
public static new MountArgs Empty => new MountArgs();
}
public sealed class MountState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Contents of the generated file, when `Type` is `File`.
/// </summary>
[Input("content")]
public Input<string>? Content { get; set; }
/// <summary>
/// Path of the generated file, when `Type` is `File`.
/// </summary>
[Input("filePath")]
public Input<string>? FilePath { get; set; }
/// <summary>
/// Path on the host, when `Type` is `Bind`.
/// </summary>
[Input("hostPath")]
public Input<string>? HostPath { get; set; }
/// <summary>
/// Path inside the container where the mount appears.
/// </summary>
[Input("mountPath")]
public Input<string>? MountPath { get; set; }
/// <summary>
/// ID of the service this mount attaches to. Must match `ServiceType` — an application ID, a compose ID, a postgres ID, and so on.
/// </summary>
[Input("serviceId")]
public Input<string>? ServiceId { get; set; }
/// <summary>
/// The kind of service this mount attaches to. Valid values: `Application`, `Postgres`, `Mysql`, `Mariadb`, `Mongo`, `Redis`, `Compose`.
/// </summary>
[Input("serviceType")]
public Input<string>? ServiceType { get; set; }
/// <summary>
/// The kind of mount to create. Valid values: `Bind`, `Volume`, `File`.
/// </summary>
[Input("type")]
public Input<string>? Type { get; set; }
/// <summary>
/// Name of the Docker volume, when `Type` is `Volume`.
/// </summary>
[Input("volumeName")]
public Input<string>? VolumeName { get; set; }
public MountState()
{
}
public static new MountState Empty => new MountState();
}
}

745
sdk/dotnet/MySql.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Output("appName")]
public Output<string> AppName { get; private set; } = null!;
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Output("applicationStatus")]
public Output<string> ApplicationStatus { get; private set; } = null!;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
[Output("args")]
public Output<ImmutableArray<string>> Args { get; private set; } = null!;
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Output("command")]
public Output<string?> Command { get; private set; } = null!;
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Output("cpuLimit")]
public Output<string?> CpuLimit { get; private set; } = null!;
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Output("cpuReservation")]
public Output<string?> CpuReservation { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Name of the database to create.
/// </summary>
[Output("databaseName")]
public Output<string> DatabaseName { get; private set; } = null!;
/// <summary>
/// Password for the database user.
/// </summary>
[Output("databasePassword")]
public Output<string> DatabasePassword { get; private set; } = null!;
/// <summary>
/// Password for the MySQL `Root` user.
/// </summary>
[Output("databaseRootPassword")]
public Output<string> DatabaseRootPassword { get; private set; } = null!;
/// <summary>
/// Database user to create.
/// </summary>
[Output("databaseUser")]
public Output<string> DatabaseUser { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Output("detachDokployNetwork")]
public Output<bool> DetachDokployNetwork { get; private set; } = null!;
/// <summary>
/// MySQL image to run, for example `mysql:8`.
/// </summary>
[Output("dockerImage")]
public Output<string> DockerImage { get; private set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Output("endpointSpecSwarm")]
public Output<string?> EndpointSpecSwarm { get; private set; } = null!;
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Output("env")]
public Output<string?> Env { get; private set; } = null!;
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Output("environmentId")]
public Output<string> EnvironmentId { get; private set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Output("externalPort")]
public Output<int?> ExternalPort { get; private set; } = null!;
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Output("healthCheckSwarm")]
public Output<string?> HealthCheckSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Output("labelsSwarm")]
public Output<string?> LabelsSwarm { get; private set; } = null!;
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Output("memoryLimit")]
public Output<string?> MemoryLimit { get; private set; } = null!;
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Output("memoryReservation")]
public Output<string?> MemoryReservation { get; private set; } = null!;
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Output("modeSwarm")]
public Output<string?> ModeSwarm { get; private set; } = null!;
/// <summary>
/// Display name of the database.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
[Output("networkIds")]
public Output<ImmutableArray<string>> NetworkIds { get; private set; } = null!;
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Output("networkSwarm")]
public Output<string?> NetworkSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Output("placementSwarm")]
public Output<string?> PlacementSwarm { get; private set; } = null!;
/// <summary>
/// Number of replicas to run.
/// </summary>
[Output("replicas")]
public Output<int> Replicas { get; private set; } = null!;
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Output("restartPolicySwarm")]
public Output<string?> RestartPolicySwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Output("rollbackConfigSwarm")]
public Output<string?> RollbackConfigSwarm { get; private set; } = null!;
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Output("stopGracePeriodSwarm")]
public Output<int?> StopGracePeriodSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Output("ulimitsSwarm")]
public Output<string?> UlimitsSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Output("updateConfigSwarm")]
public Output<string?> UpdateConfigSwarm { get; private set; } = null!;
/// <summary>
/// Create a MySql resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, MySqlState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/mySql:MySql", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing MySql resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static MySql Get(string name, Input<string> id, MySqlState? state = null, CustomResourceOptions? options = null)
{
return new MySql(name, id, state, options);
}
}
public sealed class MySqlArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// Name of the database to create.
/// </summary>
[Input("databaseName", required: true)]
public Input<string> DatabaseName { get; set; } = null!;
[Input("databasePassword", required: true)]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the database user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
[Input("databaseRootPassword", required: true)]
private Input<string>? _databaseRootPassword;
/// <summary>
/// Password for the MySQL `Root` user.
/// </summary>
public Input<string>? DatabaseRootPassword
{
get => _databaseRootPassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databaseRootPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Database user to create.
/// </summary>
[Input("databaseUser", required: true)]
public Input<string> DatabaseUser { get; set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// MySQL image to run, for example `mysql:8`.
/// </summary>
[Input("dockerImage", required: true)]
public Input<string> DockerImage { get; set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId", required: true)]
public Input<string> EnvironmentId { get; set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public MySqlArgs()
{
}
public static new MySqlArgs Empty => new MySqlArgs();
}
public sealed class MySqlState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Input("applicationStatus")]
public Input<string>? ApplicationStatus { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Name of the database to create.
/// </summary>
[Input("databaseName")]
public Input<string>? DatabaseName { get; set; }
[Input("databasePassword")]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the database user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
[Input("databaseRootPassword")]
private Input<string>? _databaseRootPassword;
/// <summary>
/// Password for the MySQL `Root` user.
/// </summary>
public Input<string>? DatabaseRootPassword
{
get => _databaseRootPassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databaseRootPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Database user to create.
/// </summary>
[Input("databaseUser")]
public Input<string>? DatabaseUser { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// MySQL image to run, for example `mysql:8`.
/// </summary>
[Input("dockerImage")]
public Input<string>? DockerImage { get; set; }
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId")]
public Input<string>? EnvironmentId { get; set; }
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public MySqlState()
{
}
public static new MySqlState Empty => new MySqlState();
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

166
sdk/dotnet/Port.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Application this port belongs to.
/// </summary>
[Output("applicationId")]
public Output<string> ApplicationId { get; private set; } = null!;
/// <summary>
/// Transport protocol. Valid values: `Tcp`, `Udp`.
/// </summary>
[Output("protocol")]
public Output<string> Protocol { get; private set; } = null!;
/// <summary>
/// Docker Swarm publish mode. `Host` binds directly to the node; `Ingress` uses the swarm routing mesh. Valid values: `Ingress`, `Host`.
/// </summary>
[Output("publishMode")]
public Output<string> PublishMode { get; private set; } = null!;
/// <summary>
/// Port exposed on the host.
/// </summary>
[Output("publishedPort")]
public Output<int> PublishedPort { get; private set; } = null!;
/// <summary>
/// Port the container listens on.
/// </summary>
[Output("targetPort")]
public Output<int> TargetPort { get; private set; } = null!;
/// <summary>
/// Create a Port resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, PortState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/port:Port", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Port resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Port Get(string name, Input<string> id, PortState? state = null, CustomResourceOptions? options = null)
{
return new Port(name, id, state, options);
}
}
public sealed class PortArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application this port belongs to.
/// </summary>
[Input("applicationId", required: true)]
public Input<string> ApplicationId { get; set; } = null!;
/// <summary>
/// Transport protocol. Valid values: `Tcp`, `Udp`.
/// </summary>
[Input("protocol", required: true)]
public Input<string> Protocol { get; set; } = null!;
/// <summary>
/// Docker Swarm publish mode. `Host` binds directly to the node; `Ingress` uses the swarm routing mesh. Valid values: `Ingress`, `Host`.
/// </summary>
[Input("publishMode")]
public Input<string>? PublishMode { get; set; }
/// <summary>
/// Port exposed on the host.
/// </summary>
[Input("publishedPort", required: true)]
public Input<int> PublishedPort { get; set; } = null!;
/// <summary>
/// Port the container listens on.
/// </summary>
[Input("targetPort", required: true)]
public Input<int> TargetPort { get; set; } = null!;
public PortArgs()
{
}
public static new PortArgs Empty => new PortArgs();
}
public sealed class PortState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application this port belongs to.
/// </summary>
[Input("applicationId")]
public Input<string>? ApplicationId { get; set; }
/// <summary>
/// Transport protocol. Valid values: `Tcp`, `Udp`.
/// </summary>
[Input("protocol")]
public Input<string>? Protocol { get; set; }
/// <summary>
/// Docker Swarm publish mode. `Host` binds directly to the node; `Ingress` uses the swarm routing mesh. Valid values: `Ingress`, `Host`.
/// </summary>
[Input("publishMode")]
public Input<string>? PublishMode { get; set; }
/// <summary>
/// Port exposed on the host.
/// </summary>
[Input("publishedPort")]
public Input<int>? PublishedPort { get; set; }
/// <summary>
/// Port the container listens on.
/// </summary>
[Input("targetPort")]
public Input<int>? TargetPort { get; set; }
public PortState()
{
}
public static new PortState Empty => new PortState();
}
}

706
sdk/dotnet/Postgres.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Output("appName")]
public Output<string> AppName { get; private set; } = null!;
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Output("applicationStatus")]
public Output<string> ApplicationStatus { get; private set; } = null!;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
[Output("args")]
public Output<ImmutableArray<string>> Args { get; private set; } = null!;
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Output("command")]
public Output<string?> Command { get; private set; } = null!;
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Output("cpuLimit")]
public Output<string?> CpuLimit { get; private set; } = null!;
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Output("cpuReservation")]
public Output<string?> CpuReservation { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Name of the database to create.
/// </summary>
[Output("databaseName")]
public Output<string> DatabaseName { get; private set; } = null!;
/// <summary>
/// Password for the database user.
/// </summary>
[Output("databasePassword")]
public Output<string> DatabasePassword { get; private set; } = null!;
/// <summary>
/// Database user to create.
/// </summary>
[Output("databaseUser")]
public Output<string> DatabaseUser { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Output("detachDokployNetwork")]
public Output<bool> DetachDokployNetwork { get; private set; } = null!;
/// <summary>
/// PostgreSQL image to run, for example `postgres:16`.
/// </summary>
[Output("dockerImage")]
public Output<string> DockerImage { get; private set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Output("endpointSpecSwarm")]
public Output<string?> EndpointSpecSwarm { get; private set; } = null!;
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Output("env")]
public Output<string?> Env { get; private set; } = null!;
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Output("environmentId")]
public Output<string> EnvironmentId { get; private set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Output("externalPort")]
public Output<int?> ExternalPort { get; private set; } = null!;
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Output("healthCheckSwarm")]
public Output<string?> HealthCheckSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Output("labelsSwarm")]
public Output<string?> LabelsSwarm { get; private set; } = null!;
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Output("memoryLimit")]
public Output<string?> MemoryLimit { get; private set; } = null!;
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Output("memoryReservation")]
public Output<string?> MemoryReservation { get; private set; } = null!;
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Output("modeSwarm")]
public Output<string?> ModeSwarm { get; private set; } = null!;
/// <summary>
/// Display name of the database.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
[Output("networkIds")]
public Output<ImmutableArray<string>> NetworkIds { get; private set; } = null!;
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Output("networkSwarm")]
public Output<string?> NetworkSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Output("placementSwarm")]
public Output<string?> PlacementSwarm { get; private set; } = null!;
/// <summary>
/// Number of replicas to run.
/// </summary>
[Output("replicas")]
public Output<int> Replicas { get; private set; } = null!;
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Output("restartPolicySwarm")]
public Output<string?> RestartPolicySwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Output("rollbackConfigSwarm")]
public Output<string?> RollbackConfigSwarm { get; private set; } = null!;
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Output("stopGracePeriodSwarm")]
public Output<int?> StopGracePeriodSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Output("ulimitsSwarm")]
public Output<string?> UlimitsSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Output("updateConfigSwarm")]
public Output<string?> UpdateConfigSwarm { get; private set; } = null!;
/// <summary>
/// Create a Postgres resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, PostgresState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/postgres:Postgres", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Postgres resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Postgres Get(string name, Input<string> id, PostgresState? state = null, CustomResourceOptions? options = null)
{
return new Postgres(name, id, state, options);
}
}
public sealed class PostgresArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// Name of the database to create.
/// </summary>
[Input("databaseName", required: true)]
public Input<string> DatabaseName { get; set; } = null!;
[Input("databasePassword", required: true)]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the database user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Database user to create.
/// </summary>
[Input("databaseUser", required: true)]
public Input<string> DatabaseUser { get; set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// PostgreSQL image to run, for example `postgres:16`.
/// </summary>
[Input("dockerImage", required: true)]
public Input<string> DockerImage { get; set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId", required: true)]
public Input<string> EnvironmentId { get; set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public PostgresArgs()
{
}
public static new PostgresArgs Empty => new PostgresArgs();
}
public sealed class PostgresState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Input("applicationStatus")]
public Input<string>? ApplicationStatus { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Name of the database to create.
/// </summary>
[Input("databaseName")]
public Input<string>? DatabaseName { get; set; }
[Input("databasePassword")]
private Input<string>? _databasePassword;
/// <summary>
/// Password for the database user.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Database user to create.
/// </summary>
[Input("databaseUser")]
public Input<string>? DatabaseUser { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// PostgreSQL image to run, for example `postgres:16`.
/// </summary>
[Input("dockerImage")]
public Input<string>? DockerImage { get; set; }
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId")]
public Input<string>? EnvironmentId { get; set; }
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public PostgresState()
{
}
public static new PostgresState Empty => new PostgresState();
}
}

166
sdk/dotnet/Project.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// RFC 3339 timestamp of when the project was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// ID of the `Production` environment that Dokploy creates automatically with the project.
/// </summary>
[Output("defaultEnvironmentId")]
public Output<string> DefaultEnvironmentId { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project.
/// </summary>
[Output("env")]
public Output<string> Env { get; private set; } = null!;
/// <summary>
/// Display name of the project.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// Organization that owns the project.
/// </summary>
[Output("organizationId")]
public Output<string> OrganizationId { get; private set; } = null!;
/// <summary>
/// Create a Project resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, ProjectState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/project:Project", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Project resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Project Get(string name, Input<string> id, ProjectState? state = null, CustomResourceOptions? options = null)
{
return new Project(name, id, state, options);
}
}
public sealed class ProjectArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Display name of the project.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
public ProjectArgs()
{
}
public static new ProjectArgs Empty => new ProjectArgs();
}
public sealed class ProjectState : global::Pulumi.ResourceArgs
{
/// <summary>
/// RFC 3339 timestamp of when the project was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// ID of the `Production` environment that Dokploy creates automatically with the project.
/// </summary>
[Input("defaultEnvironmentId")]
public Input<string>? DefaultEnvironmentId { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Project-wide environment variables in `KEY=value` format, one per line. These are shared with every service in the project.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Display name of the project.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
/// <summary>
/// Organization that owns the project.
/// </summary>
[Input("organizationId")]
public Input<string>? OrganizationId { get; set; }
public ProjectState()
{
}
public static new ProjectState Empty => new ProjectState();
}
}

130
sdk/dotnet/Provider.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// 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.
/// </summary>
[DokployResourceType("pulumi:providers:dokploy")]
public partial class Provider : global::Pulumi.ProviderResource
{
/// <summary>
/// API token generated in Dokploy under *Settings &gt; Profile &gt; API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable.
/// </summary>
[Output("apiKey")]
public Output<string?> ApiKey { get; private set; } = null!;
/// <summary>
/// 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.
/// </summary>
[Output("host")]
public Output<string?> Host { get; private set; } = null!;
/// <summary>
/// Create a Provider resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string>? 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;
}
/// <summary>
/// This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.
/// </summary>
public global::Pulumi.Output<ProviderTerraformConfigResult> TerraformConfig()
=> global::Pulumi.Deployment.Instance.Call<ProviderTerraformConfigResult>("pulumi:providers:dokploy/terraformConfig", CallArgs.Empty, this);
}
public sealed class ProviderArgs : global::Pulumi.ResourceArgs
{
[Input("apiKey")]
private Input<string>? _apiKey;
/// <summary>
/// API token generated in Dokploy under *Settings &gt; Profile &gt; API/CLI*. May also be set with the `DOKPLOY_API_KEY` environment variable.
/// </summary>
public Input<string>? ApiKey
{
get => _apiKey;
set
{
var emptySecret = Output.CreateSecret(0);
_apiKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// 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.
/// </summary>
[Input("host")]
public Input<string>? Host { get; set; }
/// <summary>
/// Skip TLS certificate verification. Only use this for instances behind a self-signed certificate. Defaults to `False`.
/// </summary>
[Input("insecureSkipVerify", json: true)]
public Input<bool>? InsecureSkipVerify { get; set; }
/// <summary>
/// Per-request timeout in seconds. Defaults to `60`. May also be set with the `DOKPLOY_TIMEOUT_SECONDS` environment variable.
/// </summary>
[Input("timeoutSeconds", json: true)]
public Input<int>? 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();
}
/// <summary>
/// The results of the <see cref="Provider.TerraformConfig"/> method.
/// </summary>
[OutputType]
public sealed class ProviderTerraformConfigResult
{
public readonly ImmutableDictionary<string, object> Result;
[OutputConstructor]
private ProviderTerraformConfigResult(ImmutableDictionary<string, object> result)
{
Result = result;
}
}
}

3
sdk/dotnet/Pulumi.yaml generated Normal file
View File

@@ -0,0 +1,3 @@
name: dokploy
description: A Pulumi resource provider for dokploy.
language: dotnet

206
sdk/dotnet/README.md generated Normal file
View File

@@ -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).

160
sdk/dotnet/Redirect.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Application this redirect belongs to.
/// </summary>
[Output("applicationId")]
public Output<string> ApplicationId { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the redirect was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Issue a permanent (301) redirect instead of a temporary (302) one.
/// </summary>
[Output("permanent")]
public Output<bool> Permanent { get; private set; } = null!;
/// <summary>
/// Regular expression matched against the incoming URL.
/// </summary>
[Output("regex")]
public Output<string> Regex { get; private set; } = null!;
/// <summary>
/// Replacement URL, which may reference capture groups such as `${1}`.
/// </summary>
[Output("replacement")]
public Output<string> Replacement { get; private set; } = null!;
/// <summary>
/// Create a Redirect resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, RedirectState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/redirect:Redirect", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Redirect resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Redirect Get(string name, Input<string> id, RedirectState? state = null, CustomResourceOptions? options = null)
{
return new Redirect(name, id, state, options);
}
}
public sealed class RedirectArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application this redirect belongs to.
/// </summary>
[Input("applicationId", required: true)]
public Input<string> ApplicationId { get; set; } = null!;
/// <summary>
/// Issue a permanent (301) redirect instead of a temporary (302) one.
/// </summary>
[Input("permanent")]
public Input<bool>? Permanent { get; set; }
/// <summary>
/// Regular expression matched against the incoming URL.
/// </summary>
[Input("regex", required: true)]
public Input<string> Regex { get; set; } = null!;
/// <summary>
/// Replacement URL, which may reference capture groups such as `${1}`.
/// </summary>
[Input("replacement", required: true)]
public Input<string> Replacement { get; set; } = null!;
public RedirectArgs()
{
}
public static new RedirectArgs Empty => new RedirectArgs();
}
public sealed class RedirectState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application this redirect belongs to.
/// </summary>
[Input("applicationId")]
public Input<string>? ApplicationId { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the redirect was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Issue a permanent (301) redirect instead of a temporary (302) one.
/// </summary>
[Input("permanent")]
public Input<bool>? Permanent { get; set; }
/// <summary>
/// Regular expression matched against the incoming URL.
/// </summary>
[Input("regex")]
public Input<string>? Regex { get; set; }
/// <summary>
/// Replacement URL, which may reference capture groups such as `${1}`.
/// </summary>
[Input("replacement")]
public Input<string>? Replacement { get; set; }
public RedirectState()
{
}
public static new RedirectState Empty => new RedirectState();
}
}

670
sdk/dotnet/Redis.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Output("appName")]
public Output<string> AppName { get; private set; } = null!;
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Output("applicationStatus")]
public Output<string> ApplicationStatus { get; private set; } = null!;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
[Output("args")]
public Output<ImmutableArray<string>> Args { get; private set; } = null!;
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Output("command")]
public Output<string?> Command { get; private set; } = null!;
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Output("cpuLimit")]
public Output<string?> CpuLimit { get; private set; } = null!;
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Output("cpuReservation")]
public Output<string?> CpuReservation { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Password used to authenticate to Redis.
/// </summary>
[Output("databasePassword")]
public Output<string> DatabasePassword { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Output("detachDokployNetwork")]
public Output<bool> DetachDokployNetwork { get; private set; } = null!;
/// <summary>
/// Redis image to run, for example `redis:7`.
/// </summary>
[Output("dockerImage")]
public Output<string> DockerImage { get; private set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Output("endpointSpecSwarm")]
public Output<string?> EndpointSpecSwarm { get; private set; } = null!;
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Output("env")]
public Output<string?> Env { get; private set; } = null!;
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Output("environmentId")]
public Output<string> EnvironmentId { get; private set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Output("externalPort")]
public Output<int?> ExternalPort { get; private set; } = null!;
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Output("healthCheckSwarm")]
public Output<string?> HealthCheckSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Output("labelsSwarm")]
public Output<string?> LabelsSwarm { get; private set; } = null!;
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Output("memoryLimit")]
public Output<string?> MemoryLimit { get; private set; } = null!;
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Output("memoryReservation")]
public Output<string?> MemoryReservation { get; private set; } = null!;
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Output("modeSwarm")]
public Output<string?> ModeSwarm { get; private set; } = null!;
/// <summary>
/// Display name of the database.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
[Output("networkIds")]
public Output<ImmutableArray<string>> NetworkIds { get; private set; } = null!;
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Output("networkSwarm")]
public Output<string?> NetworkSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Output("placementSwarm")]
public Output<string?> PlacementSwarm { get; private set; } = null!;
/// <summary>
/// Number of replicas to run.
/// </summary>
[Output("replicas")]
public Output<int> Replicas { get; private set; } = null!;
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Output("restartPolicySwarm")]
public Output<string?> RestartPolicySwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Output("rollbackConfigSwarm")]
public Output<string?> RollbackConfigSwarm { get; private set; } = null!;
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Output("stopGracePeriodSwarm")]
public Output<int?> StopGracePeriodSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Output("ulimitsSwarm")]
public Output<string?> UlimitsSwarm { get; private set; } = null!;
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Output("updateConfigSwarm")]
public Output<string?> UpdateConfigSwarm { get; private set; } = null!;
/// <summary>
/// Create a Redis resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, RedisState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/redis:Redis", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Redis resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Redis Get(string name, Input<string> id, RedisState? state = null, CustomResourceOptions? options = null)
{
return new Redis(name, id, state, options);
}
}
public sealed class RedisArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
[Input("databasePassword", required: true)]
private Input<string>? _databasePassword;
/// <summary>
/// Password used to authenticate to Redis.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// Redis image to run, for example `redis:7`.
/// </summary>
[Input("dockerImage", required: true)]
public Input<string> DockerImage { get; set; } = null!;
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId", required: true)]
public Input<string> EnvironmentId { get; set; } = null!;
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public RedisArgs()
{
}
public static new RedisArgs Empty => new RedisArgs();
}
public sealed class RedisState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Unique Docker service name. Generated by Dokploy when omitted. Changing it forces a new database.
/// </summary>
[Input("appName")]
public Input<string>? AppName { get; set; }
/// <summary>
/// Current status reported by Dokploy: `Idle`, `Running`, `Done` or `Error`.
/// </summary>
[Input("applicationStatus")]
public Input<string>? ApplicationStatus { get; set; }
[Input("args")]
private InputList<string>? _args;
/// <summary>
/// Arguments appended to the container command.
/// </summary>
public InputList<string> Args
{
get => _args ?? (_args = new InputList<string>());
set => _args = value;
}
/// <summary>
/// Override the container entrypoint command.
/// </summary>
[Input("command")]
public Input<string>? Command { get; set; }
/// <summary>
/// Hard CPU limit, for example `1`.
/// </summary>
[Input("cpuLimit")]
public Input<string>? CpuLimit { get; set; }
/// <summary>
/// Soft CPU reservation, for example `0.5`.
/// </summary>
[Input("cpuReservation")]
public Input<string>? CpuReservation { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the database was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
[Input("databasePassword")]
private Input<string>? _databasePassword;
/// <summary>
/// Password used to authenticate to Redis.
/// </summary>
public Input<string>? DatabasePassword
{
get => _databasePassword;
set
{
var emptySecret = Output.CreateSecret(0);
_databasePassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Detach the service from the shared `dokploy-network`.
/// </summary>
[Input("detachDokployNetwork")]
public Input<bool>? DetachDokployNetwork { get; set; }
/// <summary>
/// Redis image to run, for example `redis:7`.
/// </summary>
[Input("dockerImage")]
public Input<string>? DockerImage { get; set; }
/// <summary>
/// Docker Swarm endpoint specification, as a JSON object.
/// </summary>
[Input("endpointSpecSwarm")]
public Input<string>? EndpointSpecSwarm { get; set; }
/// <summary>
/// Environment variables in `KEY=value` format, one per line.
/// </summary>
[Input("env")]
public Input<string>? Env { get; set; }
/// <summary>
/// Environment this database belongs to.
/// </summary>
[Input("environmentId")]
public Input<string>? EnvironmentId { get; set; }
/// <summary>
/// Host port to expose the database on. Leave unset to keep the database reachable only from inside the Docker network.
/// </summary>
[Input("externalPort")]
public Input<int>? ExternalPort { get; set; }
/// <summary>
/// Docker Swarm health check configuration, as a JSON object.
/// </summary>
[Input("healthCheckSwarm")]
public Input<string>? HealthCheckSwarm { get; set; }
/// <summary>
/// Docker Swarm service labels, as a JSON object.
/// </summary>
[Input("labelsSwarm")]
public Input<string>? LabelsSwarm { get; set; }
/// <summary>
/// Hard memory limit, for example `512m`.
/// </summary>
[Input("memoryLimit")]
public Input<string>? MemoryLimit { get; set; }
/// <summary>
/// Soft memory reservation, for example `256m`.
/// </summary>
[Input("memoryReservation")]
public Input<string>? MemoryReservation { get; set; }
/// <summary>
/// Docker Swarm service mode, as a JSON object.
/// </summary>
[Input("modeSwarm")]
public Input<string>? ModeSwarm { get; set; }
/// <summary>
/// Display name of the database.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("networkIds")]
private InputList<string>? _networkIds;
/// <summary>
/// IDs of additional Docker networks to attach.
/// </summary>
public InputList<string> NetworkIds
{
get => _networkIds ?? (_networkIds = new InputList<string>());
set => _networkIds = value;
}
/// <summary>
/// Docker Swarm network attachments, as a JSON array.
/// </summary>
[Input("networkSwarm")]
public Input<string>? NetworkSwarm { get; set; }
/// <summary>
/// Docker Swarm placement constraints, as a JSON object.
/// </summary>
[Input("placementSwarm")]
public Input<string>? PlacementSwarm { get; set; }
/// <summary>
/// Number of replicas to run.
/// </summary>
[Input("replicas")]
public Input<int>? Replicas { get; set; }
/// <summary>
/// Docker Swarm restart policy, as a JSON object.
/// </summary>
[Input("restartPolicySwarm")]
public Input<string>? RestartPolicySwarm { get; set; }
/// <summary>
/// Docker Swarm rollback configuration, as a JSON object.
/// </summary>
[Input("rollbackConfigSwarm")]
public Input<string>? RollbackConfigSwarm { get; set; }
/// <summary>
/// Remote server to deploy on. Omit to use the Dokploy host itself.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Grace period in nanoseconds before a container is killed.
/// </summary>
[Input("stopGracePeriodSwarm")]
public Input<int>? StopGracePeriodSwarm { get; set; }
/// <summary>
/// Docker Swarm ulimits, as a JSON object.
/// </summary>
[Input("ulimitsSwarm")]
public Input<string>? UlimitsSwarm { get; set; }
/// <summary>
/// Docker Swarm rolling update configuration, as a JSON object.
/// </summary>
[Input("updateConfigSwarm")]
public Input<string>? UpdateConfigSwarm { get; set; }
public RedisState()
{
}
public static new RedisState Empty => new RedisState();
}
}

238
sdk/dotnet/Registry.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// RFC 3339 timestamp of when the registry was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Prefix prepended to pushed image names, for example an organization or namespace.
/// </summary>
[Output("imagePrefix")]
public Output<string?> ImagePrefix { get; private set; } = null!;
/// <summary>
/// Password or access token used to authenticate.
/// </summary>
[Output("password")]
public Output<string> Password { get; private set; } = null!;
/// <summary>
/// Display name of the registry.
/// </summary>
[Output("registryName")]
public Output<string> RegistryName { get; private set; } = null!;
/// <summary>
/// Registry kind. Dokploy currently accepts only `Cloud`. Valid values: `Cloud`. Defaults to `Cloud`.
/// </summary>
[Output("registryType")]
public Output<string> RegistryType { get; private set; } = null!;
/// <summary>
/// Registry hostname, for example `ghcr.io`.
/// </summary>
[Output("registryUrl")]
public Output<string> RegistryUrl { get; private set; } = null!;
/// <summary>
/// Server this registry is scoped to.
/// </summary>
[Output("serverId")]
public Output<string?> ServerId { get; private set; } = null!;
/// <summary>
/// Username used to authenticate to the registry.
/// </summary>
[Output("username")]
public Output<string> Username { get; private set; } = null!;
/// <summary>
/// Create a Registry resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, RegistryState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/registry:Registry", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Registry resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Registry Get(string name, Input<string> id, RegistryState? state = null, CustomResourceOptions? options = null)
{
return new Registry(name, id, state, options);
}
}
public sealed class RegistryArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Prefix prepended to pushed image names, for example an organization or namespace.
/// </summary>
[Input("imagePrefix")]
public Input<string>? ImagePrefix { get; set; }
[Input("password", required: true)]
private Input<string>? _password;
/// <summary>
/// Password or access token used to authenticate.
/// </summary>
public Input<string>? Password
{
get => _password;
set
{
var emptySecret = Output.CreateSecret(0);
_password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Display name of the registry.
/// </summary>
[Input("registryName", required: true)]
public Input<string> RegistryName { get; set; } = null!;
/// <summary>
/// Registry kind. Dokploy currently accepts only `Cloud`. Valid values: `Cloud`. Defaults to `Cloud`.
/// </summary>
[Input("registryType")]
public Input<string>? RegistryType { get; set; }
/// <summary>
/// Registry hostname, for example `ghcr.io`.
/// </summary>
[Input("registryUrl", required: true)]
public Input<string> RegistryUrl { get; set; } = null!;
/// <summary>
/// Server this registry is scoped to.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Username used to authenticate to the registry.
/// </summary>
[Input("username", required: true)]
public Input<string> Username { get; set; } = null!;
public RegistryArgs()
{
}
public static new RegistryArgs Empty => new RegistryArgs();
}
public sealed class RegistryState : global::Pulumi.ResourceArgs
{
/// <summary>
/// RFC 3339 timestamp of when the registry was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Prefix prepended to pushed image names, for example an organization or namespace.
/// </summary>
[Input("imagePrefix")]
public Input<string>? ImagePrefix { get; set; }
[Input("password")]
private Input<string>? _password;
/// <summary>
/// Password or access token used to authenticate.
/// </summary>
public Input<string>? Password
{
get => _password;
set
{
var emptySecret = Output.CreateSecret(0);
_password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Display name of the registry.
/// </summary>
[Input("registryName")]
public Input<string>? RegistryName { get; set; }
/// <summary>
/// Registry kind. Dokploy currently accepts only `Cloud`. Valid values: `Cloud`. Defaults to `Cloud`.
/// </summary>
[Input("registryType")]
public Input<string>? RegistryType { get; set; }
/// <summary>
/// Registry hostname, for example `ghcr.io`.
/// </summary>
[Input("registryUrl")]
public Input<string>? RegistryUrl { get; set; }
/// <summary>
/// Server this registry is scoped to.
/// </summary>
[Input("serverId")]
public Input<string>? ServerId { get; set; }
/// <summary>
/// Username used to authenticate to the registry.
/// </summary>
[Input("username")]
public Input<string>? Username { get; set; }
public RegistryState()
{
}
public static new RegistryState Empty => new RegistryState();
}
}

166
sdk/dotnet/Security.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// Application these credentials protect.
/// </summary>
[Output("applicationId")]
public Output<string> ApplicationId { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the credentials were created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Basic auth password.
/// </summary>
[Output("password")]
public Output<string> Password { get; private set; } = null!;
/// <summary>
/// Basic auth username.
/// </summary>
[Output("username")]
public Output<string> Username { get; private set; } = null!;
/// <summary>
/// Create a Security resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, SecurityState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/security:Security", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing Security resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static Security Get(string name, Input<string> id, SecurityState? state = null, CustomResourceOptions? options = null)
{
return new Security(name, id, state, options);
}
}
public sealed class SecurityArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application these credentials protect.
/// </summary>
[Input("applicationId", required: true)]
public Input<string> ApplicationId { get; set; } = null!;
[Input("password", required: true)]
private Input<string>? _password;
/// <summary>
/// Basic auth password.
/// </summary>
public Input<string>? Password
{
get => _password;
set
{
var emptySecret = Output.CreateSecret(0);
_password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Basic auth username.
/// </summary>
[Input("username", required: true)]
public Input<string> Username { get; set; } = null!;
public SecurityArgs()
{
}
public static new SecurityArgs Empty => new SecurityArgs();
}
public sealed class SecurityState : global::Pulumi.ResourceArgs
{
/// <summary>
/// Application these credentials protect.
/// </summary>
[Input("applicationId")]
public Input<string>? ApplicationId { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the credentials were created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
[Input("password")]
private Input<string>? _password;
/// <summary>
/// Basic auth password.
/// </summary>
public Input<string>? Password
{
get => _password;
set
{
var emptySecret = Output.CreateSecret(0);
_password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// Basic auth username.
/// </summary>
[Input("username")]
public Input<string>? Username { get; set; }
public SecurityState()
{
}
public static new SecurityState Empty => new SecurityState();
}
}

196
sdk/dotnet/SshKey.cs generated Normal file
View File

@@ -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
{
/// <summary>
/// RFC 3339 timestamp of when the key was created.
/// </summary>
[Output("createdAt")]
public Output<string> CreatedAt { get; private set; } = null!;
/// <summary>
/// Free-form description.
/// </summary>
[Output("description")]
public Output<string?> Description { get; private set; } = null!;
/// <summary>
/// RFC 3339 timestamp of when the key was last used, if ever.
/// </summary>
[Output("lastUsedAt")]
public Output<string> LastUsedAt { get; private set; } = null!;
/// <summary>
/// Display name of the key pair.
/// </summary>
[Output("name")]
public Output<string> Name { get; private set; } = null!;
/// <summary>
/// PEM-encoded private key.
/// </summary>
[Output("privateKey")]
public Output<string> PrivateKey { get; private set; } = null!;
/// <summary>
/// OpenSSH-formatted public key.
/// </summary>
[Output("publicKey")]
public Output<string> PublicKey { get; private set; } = null!;
/// <summary>
/// Create a SshKey resource with the given unique name, arguments, and options.
/// </summary>
///
/// <param name="name">The unique name of the resource</param>
/// <param name="args">The arguments used to populate this resource's properties</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
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<string> id, SshKeyState? state = null, CustomResourceOptions? options = null)
: base("dokploy:index/sshKey:SshKey", name, state, MakeResourceOptions(options, id))
{
}
private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? 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;
}
/// <summary>
/// Get an existing SshKey resource's state with the given name, ID, and optional extra
/// properties used to qualify the lookup.
/// </summary>
///
/// <param name="name">The unique name of the resulting resource.</param>
/// <param name="id">The unique provider ID of the resource to lookup.</param>
/// <param name="state">Any extra arguments used during the lookup.</param>
/// <param name="options">A bag of options that control this resource's behavior</param>
public static SshKey Get(string name, Input<string> id, SshKeyState? state = null, CustomResourceOptions? options = null)
{
return new SshKey(name, id, state, options);
}
}
public sealed class SshKeyArgs : global::Pulumi.ResourceArgs
{
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// Display name of the key pair.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("privateKey", required: true)]
private Input<string>? _privateKey;
/// <summary>
/// PEM-encoded private key.
/// </summary>
public Input<string>? PrivateKey
{
get => _privateKey;
set
{
var emptySecret = Output.CreateSecret(0);
_privateKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// OpenSSH-formatted public key.
/// </summary>
[Input("publicKey", required: true)]
public Input<string> PublicKey { get; set; } = null!;
public SshKeyArgs()
{
}
public static new SshKeyArgs Empty => new SshKeyArgs();
}
public sealed class SshKeyState : global::Pulumi.ResourceArgs
{
/// <summary>
/// RFC 3339 timestamp of when the key was created.
/// </summary>
[Input("createdAt")]
public Input<string>? CreatedAt { get; set; }
/// <summary>
/// Free-form description.
/// </summary>
[Input("description")]
public Input<string>? Description { get; set; }
/// <summary>
/// RFC 3339 timestamp of when the key was last used, if ever.
/// </summary>
[Input("lastUsedAt")]
public Input<string>? LastUsedAt { get; set; }
/// <summary>
/// Display name of the key pair.
/// </summary>
[Input("name")]
public Input<string>? Name { get; set; }
[Input("privateKey")]
private Input<string>? _privateKey;
/// <summary>
/// PEM-encoded private key.
/// </summary>
public Input<string>? PrivateKey
{
get => _privateKey;
set
{
var emptySecret = Output.CreateSecret(0);
_privateKey = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
}
}
/// <summary>
/// OpenSSH-formatted public key.
/// </summary>
[Input("publicKey")]
public Input<string>? PublicKey { get; set; }
public SshKeyState()
{
}
public static new SshKeyState Empty => new SshKeyState();
}
}

92
sdk/dotnet/Utilities.cs generated Normal file
View File

@@ -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)
{
}
}
}

BIN
sdk/dotnet/logo.png generated Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

6
sdk/dotnet/pulumi-plugin.json generated Normal file
View File

@@ -0,0 +1,6 @@
{
"resource": true,
"name": "dokploy",
"version": "0.1.0",
"server": "github://api.github.com/maxvojtkov/pulumi-dokploy"
}

1
sdk/dotnet/version.txt generated Normal file
View File

@@ -0,0 +1 @@
0.1.0