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)