feat: Stacks Pulumi support - #3820
Conversation
Soffi AI SummaryThis PR adds Pulumi as a first-class IaC stack type in Plural Console, following the same pattern established by the earlier Terragrunt support. It introduces end-to-end support across all layers of the stack — server, controller, deployment agent harness, Go client, and React frontend. Key changes by layer:
The feature was validated end-to-end using sample Pulumi programs in a dedicated test repo against a live Console environment. Commits
Updated: 2026-07-15 09:32 UTC |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Greptile SummaryThis PR adds Pulumi as a supported IaC tool in the stacks harness, following the same structure introduced for Terragrunt. The implementation covers the full lifecycle: backend login, stack selection, config variable injection, dependency installation, preview, apply, destroy, state export, output collection, and secret detection.
Confidence Score: 5/5Safe to merge — the new Pulumi tool is well-structured and the prior issues are all resolved in this version. The implementation correctly handles the full Pulumi lifecycle with proper env propagation, nil guards, and plan-file threading. All prior blocking issues are resolved. Two minor observations remain but neither affects runtime correctness. No files require special attention.
|
| Filename | Overview |
|---|---|
| go/deployment-operator/pkg/harness/tool/pulumi/pulumi.go | New Pulumi tool implementation. The stackExport env fix and nil-run guard are correctly in place. Minor: installDependencies uses raw osexec.Command for go mod download (no timeout, no exec-level logging) inconsistently with the npm path. |
| go/deployment-operator/pkg/harness/tool/pulumi/modifier.go | Four ArgsModifier implementations. UpArgsModifier now correctly appends --plan planFile. Logic for idempotent flag injection is correct. |
| go/deployment-operator/dockerfiles/harness/pulumi.Dockerfile | New Pulumi harness image with SHA256-verified binary download. Python omitted and documented. |
| go/deployment-operator/pkg/harness/controller/controller_hooks.go | Adds Prepare() call in preStart(). Scan() errors remain klog.ErrorS (non-fatal), consistent with prior behavior. |
| go/deployment-operator/pkg/harness/stackrun/v1/types.go | Adds Parallel, PulumiStack, PulumiBackendURL, Deleted fields. Deleted correctly derives from Stack.DeletedAt. |
| go/controller/api/v1alpha1/infrastructurestack_types.go | Adds PulumiConfiguration and Validate() blocking policyEngine on PULUMI stacks. Both Go and Elixir layers enforce this. |
| lib/console/deployments/stacks/commands.ex | Adds pulumi_commands/2 with three clauses matching modifier expectations. |
| lib/console/schema/stack.ex | Adds pulumi: 4 enum, Pulumi embed, and validate_policy_engine/1 guard. |
| go/deployment-operator/pkg/harness/tool/pulumi/pulumi_test.go | Good coverage: HasChanges, Output secret redaction, configureVariables type mapping, Prepare env propagation, and nil-Run constructor. |
Reviews (7): Last reviewed commit: "update persisted queries with new operat..." | Re-trigger Greptile
817d4d6 to
659ca45
Compare
…acks-pulumi-support
michaeljguarino
left a comment
There was a problem hiding this comment.
will the pulumi code need a specific go version if it's go based? Probably not a huge issue since node is probably our best target here, but worth thinking about.
…acks-pulumi-support
|
@michaeljguarino Added a ticket to investigate it. |
Similar to #3631 which added support for Terragrunt.
Documentation added in pluralsh/documentation#611.
Test Plan
Repository with samples: https://github.com/pluralsh/pulumi-samples
Test environment: https://console.plrl-dev-aws.onplural.sh/
Console, controller and agent image tag:
sha-10ecf45Checklist
Plural Flow: console