Core Resources
The core resources cover the fundamental building blocks of a Lagoon deployment: projects, environments, variables, and groups.
Project
A Project represents a Lagoon project — a site or application managed by Lagoon, associated with a Git repository and one or more deploy targets.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Project name |
gitUrl |
string | Yes | Git repository URL |
deploytargetId |
int | Yes | Target Kubernetes cluster ID |
productionEnvironment |
string | No | Name of the production branch |
branches |
string | No | Branch regex pattern to deploy |
pullrequests |
string | No | PR regex pattern to deploy |
openshiftProjectPattern |
string | No | Namespace pattern for the project on the cluster |
autoIdle |
int | No | Auto-idle setting (0=disabled, 1=enabled) |
storageCalc |
int | No | Storage calculation (0=disabled, 1=enabled) |
Outputs
| Output | Type | Description |
|---|---|---|
lagoonId |
int | Lagoon internal project ID |
publicKey |
string | SSH deploy key generated by Lagoon — add this to your Git repository to enable deployments |
created |
string | Creation timestamp |
Import
Import an existing project using its numeric Lagoon project ID:
pulumi import lagoon:lagoon:Project my-site 123
Examples
import pulumi
import pulumi_lagoon as lagoon
project = lagoon.Project("my-drupal-site",
lagoon.ProjectArgs(
name="my-drupal-site",
git_url="git@github.com:myorg/my-drupal-site.git",
deploytarget_id=1,
production_environment="main",
branches="^(main|develop)$",
auto_idle=1,
)
)
# Export the deploy key so you can add it to your Git repository
pulumi.export("deploy_key", project.public_key)
pulumi.export("project_id", project.lagoon_id)
import * as pulumi from "@pulumi/pulumi";
import * as lagoon from "@tag1consulting/pulumi-lagoon";
const project = new lagoon.Project("my-drupal-site", {
name: "my-drupal-site",
gitUrl: "git@github.com:myorg/my-drupal-site.git",
deploytargetId: 1,
productionEnvironment: "main",
branches: "^(main|develop)$",
autoIdle: 1,
});
export const deployKey = project.publicKey;
export const projectId = project.lagoonId;
package main
import (
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
lagoon "github.com/tag1consulting/pulumi-lagoon-provider/sdk/go/lagoon/lagoon"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
project, err := lagoon.NewProject(ctx, "my-drupal-site", &lagoon.ProjectArgs{
Name: pulumi.String("my-drupal-site"),
GitUrl: pulumi.String("git@github.com:myorg/my-drupal-site.git"),
DeploytargetId: pulumi.Int(1),
ProductionEnvironment: pulumi.String("main"),
Branches: pulumi.String("^(main|develop)$"),
AutoIdle: pulumi.Int(1),
})
if err != nil {
return err
}
ctx.Export("deployKey", project.PublicKey)
ctx.Export("projectId", project.LagoonId)
return nil
})
}
using Pulumi;
using Tag1Consulting.Lagoon.Lagoon;
return await Deployment.RunAsync(() =>
{
var project = new Project("my-drupal-site", new ProjectArgs
{
Name = "my-drupal-site",
GitUrl = "git@github.com:myorg/my-drupal-site.git",
DeploytargetId = 1,
ProductionEnvironment = "main",
Branches = "^(main|develop)$",
AutoIdle = 1,
});
return new Dictionary<string, object?>
{
["deployKey"] = project.PublicKey,
["projectId"] = project.LagoonId,
};
});
Environment
An Environment represents a Lagoon environment — a deployed branch or pull request within a project.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Environment name (branch name) |
projectId |
int | Yes | Parent project ID |
deployType |
string | Yes | branch or pullrequest |
environmentType |
string | Yes | production or development |
deployBaseRef |
string | No | Base ref for deployment |
deployHeadRef |
string | No | Head ref for pull request deployments |
deployTitle |
string | No | Title for pull request deployments |
openshiftProjectName |
string | No | Override namespace name on the cluster |
autoIdle |
int | No | Auto-idle setting (0=disabled, 1=enabled) |
Outputs
| Output | Type | Description |
|---|---|---|
lagoonId |
int | Lagoon internal environment ID |
route |
string | Primary route URL |
routes |
string | All route URLs |
created |
string | Creation timestamp |
Import
Import using the project ID and environment name, separated by a colon:
pulumi import lagoon:lagoon:Environment main-env 123:main
Example
import pulumi
import pulumi_lagoon as lagoon
project = lagoon.Project("my-site",
lagoon.ProjectArgs(
name="my-site",
git_url="git@github.com:myorg/my-site.git",
deploytarget_id=1,
production_environment="main",
)
)
main_env = lagoon.Environment("main-env",
lagoon.EnvironmentArgs(
name="main",
project_id=project.lagoon_id,
deploy_type="branch",
environment_type="production",
)
)
develop_env = lagoon.Environment("develop-env",
lagoon.EnvironmentArgs(
name="develop",
project_id=project.lagoon_id,
deploy_type="branch",
environment_type="development",
auto_idle=1,
)
)
pulumi.export("main_route", main_env.route)
Variable
A Variable manages a Lagoon project or environment variable. Variables are scoped to control when they are available.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Variable name |
value |
string | Yes | Variable value (stored as a secret in Pulumi state) |
projectId |
int | Yes | Parent project ID |
scope |
string | Yes | build, runtime, global, container_registry, or internal_container_registry |
environmentId |
int | No | Environment ID — omit for a project-level variable |
Outputs
| Output | Type | Description |
|---|---|---|
lagoonId |
int | Lagoon internal variable ID |
Variable Scopes
| Scope | When Available |
|---|---|
build |
During the build phase only |
runtime |
During container execution only |
global |
During both build and runtime |
container_registry |
Registry authentication credentials |
internal_container_registry |
Internal registry authentication |
Import
For an environment-level variable:
pulumi import lagoon:lagoon:Variable my-var 123:456:MY_VAR_NAME
For a project-level variable (empty environment ID):
pulumi import lagoon:lagoon:Variable my-var 123::MY_VAR_NAME
Example
import pulumi
import pulumi_lagoon as lagoon
# Project-level variable (available to all environments)
db_host = lagoon.Variable("db-host",
lagoon.VariableArgs(
name="DB_HOST",
value="db.internal.example.com",
project_id=123,
scope="runtime",
)
)
# Environment-level variable (overrides project-level for this environment)
prod_db_host = lagoon.Variable("prod-db-host",
lagoon.VariableArgs(
name="DB_HOST",
value="db-prod.internal.example.com",
project_id=123,
environment_id=456,
scope="runtime",
)
)
# Build-time variable
npm_token = lagoon.Variable("npm-token",
lagoon.VariableArgs(
name="NPM_TOKEN",
value="<secret-redacted>",
project_id=123,
scope="build",
)
)
Group
A Group organizes projects and users in Lagoon. Groups can be nested by specifying a parentGroupName.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Group name |
parentGroupName |
string | No | Parent group name for creating a subgroup |
Outputs
| Output | Type | Description |
|---|---|---|
lagoonId |
string | Lagoon internal group ID (UUID) |
Import
Import using the group name:
pulumi import lagoon:lagoon:Group my-team my-team
Example
import pulumi
import pulumi_lagoon as lagoon
# Top-level group
org_group = lagoon.Group("my-org",
lagoon.GroupArgs(
name="my-org",
)
)
# Subgroup nested under the top-level group
dev_team = lagoon.Group("dev-team",
lagoon.GroupArgs(
name="my-org-dev",
parent_group_name="my-org",
),
opts=pulumi.ResourceOptions(depends_on=[org_group])
)
pulumi.export("org_group_id", org_group.lagoon_id)