pulumi/pulumi · error

updating environment draft: %w

Error message

updating environment draft: %w

What it means

updateEnvironment wraps errors from client.UpdateEnvironmentDraft with this message when updating an existing change-request draft identified by the --draft change-request ID. The underlying API call failed, so the YAML/tag changes were not applied to the draft.

Source

Thrown at pkg/cmd/esc/cli/env.go:490

		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)
		}
		if !client.DiagnosticsHaveErrors(diags) {
			fmt.Fprintln(esc.stdout, "Change request updated")
			fmt.Fprintf(esc.stdout, "Change request URL: %v\n", esc.changeRequestURL(ref, changeRequestID))
		}
		return diags, nil
	} else {
		diags, revision, err := esc.client.UpdateEnvironment(ctx, ref.orgName, ref.projectName, ref.envName, yaml, tag)
		if err != nil {
			return nil, fmt.Errorf("updating environment definition: %w", err)
		}
		if !client.DiagnosticsHaveErrors(diags) && envUpdateSuccessMessage != "" {
			fmt.Fprintf(esc.stdout, "%s (revision %d)\n", envUpdateSuccessMessage, revision)
		}
		return diags, nil
	}
}

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Verify the change request ID is correct and still open (not yet submitted/merged)
  2. Check the wrapped inner error for the API's reason
  3. Confirm you have edit rights on that change request
  4. Retry on transient errors

Example fix

// before
esc env set env/proj/env key value --draft 42
// after (verify draft is open)
# open the change request URL to confirm ID 42 is still a draft
esc env set org/proj/env key value --draft 42
Defensive patterns

Strategy: validation

Validate before calling

// Go: verify the draft/change request ID exists and is still open before updating
// (obtain open drafts via the change request URL or API listing)
if !isOpenDraft(changeRequestID) {
    return fmt.Errorf("change request %v is not an open draft", changeRequestID)
}

Try / catch

// Go
_, err := updateEnvironmentWithDraft(ctx, ref, draftID, yaml, tag)
if err != nil && strings.Contains(err.Error(), "updating environment draft") {
    return fmt.Errorf("draft update failed; verify the change request ID is open: %w", err)
}

Prevention

When it happens

Trigger: Running an env update with a draft/change-request ID specified, and UpdateEnvironmentDraft fails — invalid change request ID, draft not editable (already submitted), permissions, or network error.

Common situations: Passing a stale or already-submitted change request ID to --draft; typo in the change request number; insufficient permissions.

Related errors


AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31). Data as JSON: /api/errors/4cd76e8cf7d39827. Report an issue: GitHub.