From bc8bc1bc5b82ff2f17ffdcb5946b714b259ae0be Mon Sep 17 00:00:00 2001 From: Jonas Schlecht Date: Thu, 16 Jul 2026 14:10:32 +0200 Subject: [PATCH] fix(objectstorage): check service enablement only if initial service call fails Relates to STACKITCLI-426 --- .../object-storage/bucket/create/create.go | 21 +++++++++---------- .../cmd/object-storage/bucket/list/list.go | 11 ++++++++++ .../compliance-lock/describe/describe.go | 21 +++++++++---------- .../compliance-lock/lock/lock.go | 21 +++++++++---------- .../compliance-lock/unlock/unlock.go | 21 +++++++++---------- .../credentials-group/create/create.go | 11 ++++++++++ .../credentials-group/list/list.go | 11 ++++++++++ .../credentials/create/create.go | 10 +++++++++ .../object-storage/credentials/list/list.go | 10 +++++++++ 9 files changed, 93 insertions(+), 44 deletions(-) diff --git a/internal/cmd/object-storage/bucket/create/create.go b/internal/cmd/object-storage/bucket/create/create.go index 577d244d0..3b815702f 100644 --- a/internal/cmd/object-storage/bucket/create/create.go +++ b/internal/cmd/object-storage/bucket/create/create.go @@ -65,21 +65,20 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return err } - // Check if the project is enabled before trying to create - enabled, err := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) - if err != nil { - return fmt.Errorf("check if Object Storage is enabled: %w", err) - } - if !enabled { - return &errors.ServiceDisabledError{ - Service: "object-storage", - } - } - // Call API req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("create Object Storage bucket: %w", err) } diff --git a/internal/cmd/object-storage/bucket/list/list.go b/internal/cmd/object-storage/bucket/list/list.go index 352841fa6..a7b55daf6 100644 --- a/internal/cmd/object-storage/bucket/list/list.go +++ b/internal/cmd/object-storage/bucket/list/list.go @@ -17,6 +17,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/projectname" "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/client" + "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/utils" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" ) @@ -63,6 +64,16 @@ func NewCmd(params *types.CmdParams) *cobra.Command { req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("get Object Storage buckets: %w", err) } buckets := resp.GetBuckets() diff --git a/internal/cmd/object-storage/compliance-lock/describe/describe.go b/internal/cmd/object-storage/compliance-lock/describe/describe.go index 2aa3ea34a..f4c37012e 100644 --- a/internal/cmd/object-storage/compliance-lock/describe/describe.go +++ b/internal/cmd/object-storage/compliance-lock/describe/describe.go @@ -46,21 +46,20 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return err } - // Check if the project is enabled before trying to describe - enabled, err := objectStorageUtils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) - if err != nil { - return fmt.Errorf("check if Object Storage is enabled: %w", err) - } - if !enabled { - return &errors.ServiceDisabledError{ - Service: "object-storage", - } - } - // Call API req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := objectStorageUtils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("get object storage compliance lock: %w", err) } diff --git a/internal/cmd/object-storage/compliance-lock/lock/lock.go b/internal/cmd/object-storage/compliance-lock/lock/lock.go index e179f7c26..d031f7db6 100644 --- a/internal/cmd/object-storage/compliance-lock/lock/lock.go +++ b/internal/cmd/object-storage/compliance-lock/lock/lock.go @@ -61,21 +61,20 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return err } - // Check if the project is enabled before trying to create - enabled, err := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) - if err != nil { - return fmt.Errorf("check if Object Storage is enabled: %w", err) - } - if !enabled { - return &errors.ServiceDisabledError{ - Service: "object-storage", - } - } - // Call API req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("create object storage compliance lock: %w", err) } diff --git a/internal/cmd/object-storage/compliance-lock/unlock/unlock.go b/internal/cmd/object-storage/compliance-lock/unlock/unlock.go index ad9320c2a..c35df4725 100644 --- a/internal/cmd/object-storage/compliance-lock/unlock/unlock.go +++ b/internal/cmd/object-storage/compliance-lock/unlock/unlock.go @@ -61,20 +61,19 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return err } - // Check if the project is enabled before trying to create - enabled, err := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) - if err != nil { - return fmt.Errorf("check if Object Storage is enabled: %w", err) - } - if !enabled { - return &errors.ServiceDisabledError{ - Service: "object-storage", - } - } - // Call API _, err = buildRequest(ctx, model, apiClient).Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("delete object storage compliance lock: %w", err) } diff --git a/internal/cmd/object-storage/credentials-group/create/create.go b/internal/cmd/object-storage/credentials-group/create/create.go index 07623da46..89fee878a 100644 --- a/internal/cmd/object-storage/credentials-group/create/create.go +++ b/internal/cmd/object-storage/credentials-group/create/create.go @@ -16,6 +16,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/client" + "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/utils" ) const ( @@ -61,6 +62,16 @@ func NewCmd(params *types.CmdParams) *cobra.Command { req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("create Object Storage credentials group: %w", err) } diff --git a/internal/cmd/object-storage/credentials-group/list/list.go b/internal/cmd/object-storage/credentials-group/list/list.go index 6c777f0ca..f8eb84913 100644 --- a/internal/cmd/object-storage/credentials-group/list/list.go +++ b/internal/cmd/object-storage/credentials-group/list/list.go @@ -16,6 +16,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/client" + "github.com/stackitcloud/stackit-cli/internal/pkg/services/object-storage/utils" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" ) @@ -62,6 +63,16 @@ func NewCmd(params *types.CmdParams) *cobra.Command { req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := utils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("list Object Storage credentials groups: %w", err) } credentialsGroups := resp.GetCredentialsGroups() diff --git a/internal/cmd/object-storage/credentials/create/create.go b/internal/cmd/object-storage/credentials/create/create.go index 8a849f26e..eeec51ad1 100644 --- a/internal/cmd/object-storage/credentials/create/create.go +++ b/internal/cmd/object-storage/credentials/create/create.go @@ -76,6 +76,16 @@ func NewCmd(params *types.CmdParams) *cobra.Command { req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := objectStorageUtils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("create Object Storage credentials: %w", err) } diff --git a/internal/cmd/object-storage/credentials/list/list.go b/internal/cmd/object-storage/credentials/list/list.go index 119de7c76..997dc45a0 100644 --- a/internal/cmd/object-storage/credentials/list/list.go +++ b/internal/cmd/object-storage/credentials/list/list.go @@ -65,6 +65,16 @@ func NewCmd(params *types.CmdParams) *cobra.Command { req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { + // Check if the service is enabled for the given project + enabled, enabledErr := objectStorageUtils.ProjectEnabled(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region) + if enabledErr != nil { + return fmt.Errorf("check if Object Storage is enabled: %w", enabledErr) + } + if !enabled { + return &errors.ServiceDisabledError{ + Service: "object-storage", + } + } return fmt.Errorf("list Object Storage credentials: %w", err) } credentials := resp.GetAccessKeys()