pulumi/pulumi · error
creating environment draft: %w
Error message
creating environment draft: %w
What it means
updateEnvironment wraps errors from client.CreateEnvironmentDraft with this message when a change-request flow is used (a draft must be created before proposing changes). The inner error comes from the ESC cloud API failing to create the draft.
Source
Thrown at pkg/cmd/esc/cli/env.go:473
func (esc *escCommand) updateEnvironment(
ctx context.Context,
ref environmentRef,
draft string,
yaml []byte,
tag string,
envUpdateSuccessMessage string,
) ([]client.EnvironmentDiagnostic, error) {
if draft == "new" {
changeRequestID, diags, err := esc.client.CreateEnvironmentDraft(
ctx,
ref.orgName,
ref.projectName,
ref.envName,
yaml,
tag,
)
if err != nil {
return nil, fmt.Errorf("creating environment draft: %w", err)
}
if !client.DiagnosticsHaveErrors(diags) {
fmt.Fprintf(esc.stdout, "Change request created: %v\n", changeRequestID)
fmt.Fprintf(esc.stdout, "Change request URL: %v\n", esc.changeRequestURL(ref, changeRequestID))
err = esc.client.SubmitChangeRequest(ctx, ref.orgName, changeRequestID, nil)
if err != nil {
return nil, fmt.Errorf("submitting change request: %w", err)
}
fmt.Fprintln(esc.stdout, "Change request submitted")
}
return diags, nil
} else if draft != "" {
changeRequestID := draft
diags, err := esc.client.UpdateEnvironmentDraft(ctx, ref.orgName, ref.projectName, ref.envName, changeRequestID, yaml, tag) //nolint:lll
if err != nil {
return nil, fmt.Errorf("updating environment draft: %w", err)
}View on GitHub (pinned to 793f7b2e16)
Solutions
- Check the wrapped inner error for the root cause (permissions, 404, network)
- Verify you have write/change-request permissions on the target org/project
- Confirm the org, project, and environment names are correct
- Retry if the cause was transient (network/429)
Example fix
// before esc env set my-org/proj/env key value --change // after (verify name/permissions first) esc env ls my-org/proj esc env set my-org/proj/env key value --change
Defensive patterns
Strategy: try-catch
Validate before calling
// Go: pre-check access and target existence
_, err := client.GetEnvironment(ctx, ref.orgName, ref.projectName, ref.envName)
if err != nil {
return fmt.Errorf("cannot access %s/%s/%s before creating draft: %w", ref.orgName, ref.projectName, ref.envName, err)
} Try / catch
// Go
_, err := updateEnvironment(ctx, ref, yaml, tag)
if err != nil {
var wrapped *fmt.wrapError
if errors.As(err, &wrapped) && strings.Contains(err.Error(), "creating environment draft") {
return fmt.Errorf("draft creation failed; check permissions and names: %w", err)
}
return err
} Prevention
- Confirm change-request permissions in the target org
- Verify org/project/env names before updating
- Retry on transient network or 429 errors
When it happens
Trigger: Calling `esc env set`-style updates when a change request is required (or requested), and the client.CreateEnvironmentDraft call returns an error — e.g. the environment/org doesn't exist, permission denied, or network failure.
Common situations: User lacks permission to create drafts in the org/project; environment name/project typo; API outage or rate limiting during draft creation.
Related errors
- submitting change request: %w
- updating environment draft: %w
- updating environment definition: %w
- cloning environment: %w
- no open request was created for this environment; check that
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/1b25827188c2ca4d.
Report an issue: GitHub.