From 386dc1053ae459767c0e71c8df5d0191df744324 Mon Sep 17 00:00:00 2001 From: "Inter, Sven" Date: Wed, 4 Mar 2026 15:09:48 +0100 Subject: [PATCH 1/5] feat(server): add async output handling for server creation --- internal/cmd/server/create/create.go | 10 +++++++--- internal/cmd/server/create/create_test.go | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/cmd/server/create/create.go b/internal/cmd/server/create/create.go index a93efcbf7..ab5253af0 100644 --- a/internal/cmd/server/create/create.go +++ b/internal/cmd/server/create/create.go @@ -153,7 +153,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { s.Stop() } - return outputResult(params.Printer, model.OutputFormat, projectLabel, resp) + return outputResult(params.Printer, model.OutputFormat, model.Async, projectLabel, resp) }, } configureFlags(cmd) @@ -322,12 +322,16 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req.CreateServerPayload(payload) } -func outputResult(p *print.Printer, outputFormat, projectLabel string, server *iaas.Server) error { +func outputResult(p *print.Printer, outputFormat string, async bool, projectLabel string, server *iaas.Server) error { if server == nil { return fmt.Errorf("server response is empty") } return p.OutputResult(outputFormat, server, func() error { - p.Outputf("Created server for project %q.\nServer ID: %s\n", projectLabel, utils.PtrString(server.Id)) + operationState := "Created" + if async { + operationState = "Triggered creation of" + } + p.Outputf("%s server for project %q.\nServer ID: %s\n", operationState, projectLabel, utils.PtrString(server.Id)) return nil }) } diff --git a/internal/cmd/server/create/create_test.go b/internal/cmd/server/create/create_test.go index 521b80922..7ab029013 100644 --- a/internal/cmd/server/create/create_test.go +++ b/internal/cmd/server/create/create_test.go @@ -382,6 +382,7 @@ func TestBuildRequest(t *testing.T) { func TestOutputResult(t *testing.T) { type args struct { outputFormat string + async bool projectLabel string server *iaas.Server } @@ -407,7 +408,7 @@ func TestOutputResult(t *testing.T) { p.Cmd = NewCmd(&types.CmdParams{Printer: p}) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := outputResult(p, tt.args.outputFormat, tt.args.projectLabel, tt.args.server); (err != nil) != tt.wantErr { + if err := outputResult(p, tt.args.outputFormat, tt.args.async, tt.args.projectLabel, tt.args.server); (err != nil) != tt.wantErr { t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) } }) From e0ca2d716997192380567e43ce79e54152d916fd Mon Sep 17 00:00:00 2001 From: "Inter, Sven" Date: Mon, 9 Mar 2026 11:13:44 +0100 Subject: [PATCH 2/5] feat(volume): add async output handling --- internal/cmd/volume/create/create.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/cmd/volume/create/create.go b/internal/cmd/volume/create/create.go index f0bda5f69..f82725de6 100644 --- a/internal/cmd/volume/create/create.go +++ b/internal/cmd/volume/create/create.go @@ -184,7 +184,11 @@ func outputResult(p *print.Printer, model *inputModel, projectLabel string, volu return fmt.Errorf("volume response is empty") } return p.OutputResult(model.OutputFormat, volume, func() error { - p.Outputf("Created volume for project %q.\nVolume ID: %s\n", projectLabel, utils.PtrString(volume.Id)) + operationState := "Created" + if model.Async { + operationState = "Triggered creation of" + } + p.Outputf("%s volume for project %q.\nVolume ID: %s\n", operationState, projectLabel, utils.PtrString(volume.Id)) return nil }) } From 902910228737b6309543099ec4b6ec8775e7e240 Mon Sep 17 00:00:00 2001 From: "Inter, Sven" Date: Mon, 9 Mar 2026 11:18:08 +0100 Subject: [PATCH 3/5] feat(network-area): add async output handling --- internal/cmd/network-area/region/create/create.go | 10 +++++++--- internal/cmd/network-area/region/create/create_test.go | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/cmd/network-area/region/create/create.go b/internal/cmd/network-area/region/create/create.go index 63a8c6348..0b59fa852 100644 --- a/internal/cmd/network-area/region/create/create.go +++ b/internal/cmd/network-area/region/create/create.go @@ -117,7 +117,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { s.Stop() } - return outputResult(params.Printer, model.OutputFormat, model.Region, networkAreaLabel, *resp) + return outputResult(params.Printer, model.OutputFormat, model.Async, model.Region, networkAreaLabel, *resp) }, } configureFlags(cmd) @@ -186,9 +186,13 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req.CreateNetworkAreaRegionPayload(payload) } -func outputResult(p *print.Printer, outputFormat, region, networkAreaLabel string, regionalArea iaas.RegionalArea) error { +func outputResult(p *print.Printer, outputFormat string, async bool, region, networkAreaLabel string, regionalArea iaas.RegionalArea) error { return p.OutputResult(outputFormat, regionalArea, func() error { - p.Outputf("Create region configuration for SNA %q.\nRegion: %s\n", networkAreaLabel, region) + operationState := "Created" + if async { + operationState = "Triggered creation of" + } + p.Outputf("%s region configuration for SNA %q.\nRegion: %s\n", operationState, networkAreaLabel, region) return nil }) } diff --git a/internal/cmd/network-area/region/create/create_test.go b/internal/cmd/network-area/region/create/create_test.go index cf92c59c3..cff70a377 100644 --- a/internal/cmd/network-area/region/create/create_test.go +++ b/internal/cmd/network-area/region/create/create_test.go @@ -267,6 +267,7 @@ func TestBuildRequest(t *testing.T) { func Test_outputResult(t *testing.T) { type args struct { outputFormat string + async bool region string networkAreaLabel string regionalArea iaas.RegionalArea @@ -300,7 +301,7 @@ func Test_outputResult(t *testing.T) { p.Cmd = NewCmd(&types.CmdParams{Printer: p}) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := outputResult(p, tt.args.outputFormat, tt.args.region, tt.args.networkAreaLabel, tt.args.regionalArea); (err != nil) != tt.wantErr { + if err := outputResult(p, tt.args.outputFormat, tt.args.async, tt.args.region, tt.args.networkAreaLabel, tt.args.regionalArea); (err != nil) != tt.wantErr { t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) } }) From 1f89580bc80d294b034ea2b3d15a3f28465f8e72 Mon Sep 17 00:00:00 2001 From: "Inter, Sven" Date: Mon, 9 Mar 2026 14:19:17 +0100 Subject: [PATCH 4/5] feat(git): add async output handling for instance creation --- internal/cmd/git/instance/create/create.go | 13 ++++++++++++- internal/cmd/git/instance/create/create_test.go | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/internal/cmd/git/instance/create/create.go b/internal/cmd/git/instance/create/create.go index b11bb16a6..1729e3eb9 100644 --- a/internal/cmd/git/instance/create/create.go +++ b/internal/cmd/git/instance/create/create.go @@ -153,7 +153,18 @@ func outputResult(p *print.Printer, model *inputModel, resp *git.Instance) error } return p.OutputResult(outputFormat, resp, func() error { - p.Outputf("Created instance %q with id %s\n", model.Name, utils.PtrString(model.Id)) + if resp == nil { + return nil + } + operationState := "Created" + if model.Async { + operationState = "Triggered creation of" + } + id := utils.PtrString(model.Id) + if resp.Id != nil { + id = *resp.Id + } + p.Outputf("%s instance %q with id %s\n", operationState, model.Name, id) return nil }) } diff --git a/internal/cmd/git/instance/create/create_test.go b/internal/cmd/git/instance/create/create_test.go index bde352a95..c68384ed6 100644 --- a/internal/cmd/git/instance/create/create_test.go +++ b/internal/cmd/git/instance/create/create_test.go @@ -194,7 +194,7 @@ func TestOutputResult(t *testing.T) { { name: "empty input", args: args{ - model: &inputModel{}, + model: fixtureInputModel(), resp: &git.Instance{}, }, wantErr: false, From b04519ae44710a0b6c12442c67621208a36351da Mon Sep 17 00:00:00 2001 From: "Inter, Sven" Date: Mon, 9 Mar 2026 15:26:48 +0100 Subject: [PATCH 5/5] feat(mongodbflex): add async output handling in restore and clone commands --- internal/cmd/mongodbflex/backup/restore/restore.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/cmd/mongodbflex/backup/restore/restore.go b/internal/cmd/mongodbflex/backup/restore/restore.go index a4b6e5ca9..44b611669 100644 --- a/internal/cmd/mongodbflex/backup/restore/restore.go +++ b/internal/cmd/mongodbflex/backup/restore/restore.go @@ -108,7 +108,11 @@ func NewCmd(params *types.CmdParams) *cobra.Command { s.Stop() } - params.Printer.Outputf("Restored instance %q with backup %q\n", model.InstanceId, model.BackupId) + operationState := "Restored" + if model.Async { + operationState = "Triggered restore of" + } + params.Printer.Outputf("%s instance %q with backup %q\n", operationState, model.InstanceId, model.BackupId) return nil } @@ -129,7 +133,11 @@ func NewCmd(params *types.CmdParams) *cobra.Command { s.Stop() } - params.Printer.Outputf("Cloned instance %q from backup with timestamp %q\n", model.InstanceId, model.Timestamp) + operationState := "Cloned" + if model.Async { + operationState = "Triggered clone of" + } + params.Printer.Outputf("%s instance %q from backup with timestamp %q\n", operationState, model.InstanceId, model.Timestamp) return nil }, }