From f8121dde2090ac80d77f697f98b1ee9fb0d96377 Mon Sep 17 00:00:00 2001 From: aq17 Date: Thu, 17 Nov 2022 15:28:26 -0800 Subject: [PATCH] Attempt to select stack then create as fallback in ts --- ...en-create-as-fallback-on-createorselect.yaml | 4 ++++ sdk/go/auto/stack.go | 17 ++++++++--------- sdk/nodejs/automation/stack.ts | 14 +++++++------- 3 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 changelog/pending/20221117--sdk-nodejs--attempt-to-select-stack-then-create-as-fallback-on-createorselect.yaml diff --git a/changelog/pending/20221117--sdk-nodejs--attempt-to-select-stack-then-create-as-fallback-on-createorselect.yaml b/changelog/pending/20221117--sdk-nodejs--attempt-to-select-stack-then-create-as-fallback-on-createorselect.yaml new file mode 100644 index 000000000000..567507c6c8d5 --- /dev/null +++ b/changelog/pending/20221117--sdk-nodejs--attempt-to-select-stack-then-create-as-fallback-on-createorselect.yaml @@ -0,0 +1,4 @@ +changes: +- type: fix + scope: sdk/nodejs,go + description: Attempt to select stack then create as fallback on 'createOrSelect' diff --git a/sdk/go/auto/stack.go b/sdk/go/auto/stack.go index 5584f6fe8a5e..ea38e7cab6e6 100644 --- a/sdk/go/auto/stack.go +++ b/sdk/go/auto/stack.go @@ -184,19 +184,18 @@ func SelectStack(ctx context.Context, stackName string, ws Workspace) (Stack, er return s, nil } -// UpsertStack tries to create a new stack using the given workspace and -// stack name if the stack does not already exist, -// or falls back to selecting the existing stack. If the stack does not exist, -// it will be created and selected. +// UpsertStack tries to select a stack using the given workspace and +// stack name, or falls back to trying to create the stack if +// it does not exist. func UpsertStack(ctx context.Context, stackName string, ws Workspace) (Stack, error) { - s, err := NewStack(ctx, stackName, ws) - // error for all failures except if the stack already exists, as we'll - // just select the stack if it exists. - if err != nil && !IsCreateStack409Error(err) { + s, err := SelectStack(ctx, stackName, ws) + // error for all failures except if the stack is not found, as we'll + // attempt to create it. + if err != nil && !IsSelectStack404Error(err) { return s, err } - err = ws.SelectStack(ctx, stackName) + s, err = NewStack(ctx, stackName, ws) if err != nil { return s, err } diff --git a/sdk/nodejs/automation/stack.ts b/sdk/nodejs/automation/stack.ts index 9dbd021d6f01..de91d8cc6bdc 100644 --- a/sdk/nodejs/automation/stack.ts +++ b/sdk/nodejs/automation/stack.ts @@ -24,7 +24,7 @@ import TailFile from "@logdna/tail-file"; import * as log from "../log"; import { CommandResult, runPulumiCmd } from "./cmd"; import { ConfigMap, ConfigValue } from "./config"; -import { StackAlreadyExistsError } from "./errors"; +import { StackNotFoundError } from "./errors"; import { EngineEvent, SummaryEvent } from "./events"; import { LanguageServer, maxRPCMessageSize } from "./server"; import { Deployment, PulumiFn, Workspace } from "./workspace"; @@ -105,12 +105,12 @@ export class Stack { this.ready = workspace.selectStack(name); return this; case "createOrSelect": - this.ready = workspace.createStack(name).catch((err) => { - if (err instanceof StackAlreadyExistsError) { - return workspace.selectStack(name); - } - throw err; - }); + this.ready = workspace.selectStack(name).catch((err) => { + if (err instanceof StackNotFoundError) { + return workspace.createStack(name); + } + throw err; + }) return this; default: throw new Error(`unexpected Stack creation mode: ${mode}`);