From 1372252e55345e11ec9bad385f16c882ecc953fa Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 12:15:56 +0200 Subject: [PATCH 01/21] chore(logs): bump version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1ba8fc21a..1fa1f60da 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/stackitcloud/stackit-sdk-go/services/git v0.14.0 github.com/stackitcloud/stackit-sdk-go/services/iaas v1.12.0 github.com/stackitcloud/stackit-sdk-go/services/intake v0.7.1 - github.com/stackitcloud/stackit-sdk-go/services/logs v0.5.2 + github.com/stackitcloud/stackit-sdk-go/services/logs v0.10.0 github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.5.8 github.com/stackitcloud/stackit-sdk-go/services/opensearch v0.24.6 github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.3.5 diff --git a/go.sum b/go.sum index e08536c68..d4b0aa492 100644 --- a/go.sum +++ b/go.sum @@ -618,8 +618,8 @@ github.com/stackitcloud/stackit-sdk-go/services/loadbalancer v1.14.0 h1:1dvL7tX9 github.com/stackitcloud/stackit-sdk-go/services/loadbalancer v1.14.0/go.mod h1:+Ld3dn648I+YKcBV3fEkYpDSr3fel421+LurJGywSBs= github.com/stackitcloud/stackit-sdk-go/services/logme v0.25.6 h1:4x30lC+YBmo7XpsAzTn0W+C/oP5flnLVgIh5u3O/P0o= github.com/stackitcloud/stackit-sdk-go/services/logme v0.25.6/go.mod h1:ewaYUiZcBTSS6urE5zEJBPCqxu70w2IjnBHCvnKdFKE= -github.com/stackitcloud/stackit-sdk-go/services/logs v0.5.2 h1:vr4atxFRT+EL+DqONMT5R44f7AzEMbePa9U7PEE0THU= -github.com/stackitcloud/stackit-sdk-go/services/logs v0.5.2/go.mod h1:CAPsiTX7osAImfrG5RnIjaJ/Iz3QpoBKuH2fS346wuQ= +github.com/stackitcloud/stackit-sdk-go/services/logs v0.10.0 h1:g7zpfQFFq3UhAWrMK9rPaZY6dLMAuMJf5g6+r7VRTXc= +github.com/stackitcloud/stackit-sdk-go/services/logs v0.10.0/go.mod h1:tvRejL8w5KpGBbLFPQ+dXOJURgZ3OMbZmwxlKQrGMuA= github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.25.6 h1:Y/byRjX2u/OZl0gKS/Rau6ob2bDyv26xnw6A6JNkKJk= github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.25.6/go.mod h1:sY66ZgCgBc1mScPV95ek5WtUEGYizdP1RMsGaqbdbhw= github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.5.8 h1:S7t4wcT6SN8ZzdoY8d6VbF903zFpGjzqrU0FN27rJPg= From 38ff1d3615ef55b097e1aa16c8f8936679b0807c Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 12:22:54 +0200 Subject: [PATCH 02/21] chore(logs): substitute imports --- internal/cmd/logs/access_token/create/create.go | 2 +- internal/cmd/logs/access_token/create/create_test.go | 2 +- internal/cmd/logs/access_token/delete/delete.go | 2 +- internal/cmd/logs/access_token/delete/delete_test.go | 2 +- internal/cmd/logs/access_token/delete_all/delete_all.go | 2 +- internal/cmd/logs/access_token/delete_all/delete_all_test.go | 2 +- .../access_token/delete_all_expired/delete_all_expired.go | 2 +- .../delete_all_expired/delete_all_expired_test.go | 2 +- internal/cmd/logs/access_token/describe/describe.go | 2 +- internal/cmd/logs/access_token/describe/describe_test.go | 2 +- internal/cmd/logs/access_token/list/list.go | 2 +- internal/cmd/logs/access_token/list/list_test.go | 2 +- internal/cmd/logs/access_token/update/update.go | 2 +- internal/cmd/logs/access_token/update/update_test.go | 2 +- internal/cmd/logs/instance/create/create.go | 4 ++-- internal/cmd/logs/instance/create/create_test.go | 2 +- internal/cmd/logs/instance/delete/delete.go | 4 ++-- internal/cmd/logs/instance/delete/delete_test.go | 2 +- internal/cmd/logs/instance/describe/describe.go | 2 +- internal/cmd/logs/instance/describe/describe_test.go | 2 +- internal/cmd/logs/instance/list/list.go | 2 +- internal/cmd/logs/instance/list/list_test.go | 2 +- internal/cmd/logs/instance/update/update.go | 2 +- internal/cmd/logs/instance/update/update_test.go | 2 +- internal/pkg/services/logs/client/client.go | 2 +- internal/pkg/services/logs/utils/utils.go | 2 +- internal/pkg/services/logs/utils/utils_test.go | 2 +- 27 files changed, 29 insertions(+), 29 deletions(-) diff --git a/internal/cmd/logs/access_token/create/create.go b/internal/cmd/logs/access_token/create/create.go index 852810a85..f0027858a 100644 --- a/internal/cmd/logs/access_token/create/create.go +++ b/internal/cmd/logs/access_token/create/create.go @@ -7,7 +7,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/types" "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" cliErr "github.com/stackitcloud/stackit-cli/internal/pkg/errors" diff --git a/internal/cmd/logs/access_token/create/create_test.go b/internal/cmd/logs/access_token/create/create_test.go index 27ecc0380..986f83657 100644 --- a/internal/cmd/logs/access_token/create/create_test.go +++ b/internal/cmd/logs/access_token/create/create_test.go @@ -12,7 +12,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/access_token/delete/delete.go b/internal/cmd/logs/access_token/delete/delete.go index d55c8d3a2..a580e66f4 100644 --- a/internal/cmd/logs/access_token/delete/delete.go +++ b/internal/cmd/logs/access_token/delete/delete.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/types" diff --git a/internal/cmd/logs/access_token/delete/delete_test.go b/internal/cmd/logs/access_token/delete/delete_test.go index 23bbb5464..24c18767c 100644 --- a/internal/cmd/logs/access_token/delete/delete_test.go +++ b/internal/cmd/logs/access_token/delete/delete_test.go @@ -10,7 +10,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/access_token/delete_all/delete_all.go b/internal/cmd/logs/access_token/delete_all/delete_all.go index e12e89804..d0625fabf 100644 --- a/internal/cmd/logs/access_token/delete_all/delete_all.go +++ b/internal/cmd/logs/access_token/delete_all/delete_all.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" diff --git a/internal/cmd/logs/access_token/delete_all/delete_all_test.go b/internal/cmd/logs/access_token/delete_all/delete_all_test.go index 7cc8e8a81..0570c701c 100644 --- a/internal/cmd/logs/access_token/delete_all/delete_all_test.go +++ b/internal/cmd/logs/access_token/delete_all/delete_all_test.go @@ -10,7 +10,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go index fbad9528a..96cfabc7d 100644 --- a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go +++ b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" diff --git a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go index f369afa91..752b7a2b7 100644 --- a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go +++ b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go @@ -10,7 +10,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/access_token/describe/describe.go b/internal/cmd/logs/access_token/describe/describe.go index d81a8b258..7e12a2931 100644 --- a/internal/cmd/logs/access_token/describe/describe.go +++ b/internal/cmd/logs/access_token/describe/describe.go @@ -7,7 +7,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/types" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/errors" diff --git a/internal/cmd/logs/access_token/describe/describe_test.go b/internal/cmd/logs/access_token/describe/describe_test.go index 8e6bd2e20..357ed1689 100644 --- a/internal/cmd/logs/access_token/describe/describe_test.go +++ b/internal/cmd/logs/access_token/describe/describe_test.go @@ -12,7 +12,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/access_token/list/list.go b/internal/cmd/logs/access_token/list/list.go index 27967bdc8..330ca3449 100644 --- a/internal/cmd/logs/access_token/list/list.go +++ b/internal/cmd/logs/access_token/list/list.go @@ -6,7 +6,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/types" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/errors" diff --git a/internal/cmd/logs/access_token/list/list_test.go b/internal/cmd/logs/access_token/list/list_test.go index 1b05a14ad..8bc929206 100644 --- a/internal/cmd/logs/access_token/list/list_test.go +++ b/internal/cmd/logs/access_token/list/list_test.go @@ -12,7 +12,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/access_token/update/update.go b/internal/cmd/logs/access_token/update/update.go index 6fe999dba..fda0cd30b 100644 --- a/internal/cmd/logs/access_token/update/update.go +++ b/internal/cmd/logs/access_token/update/update.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/types" diff --git a/internal/cmd/logs/access_token/update/update_test.go b/internal/cmd/logs/access_token/update/update_test.go index b40fb143b..a20c5a328 100644 --- a/internal/cmd/logs/access_token/update/update_test.go +++ b/internal/cmd/logs/access_token/update/update_test.go @@ -11,7 +11,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/instance/create/create.go b/internal/cmd/logs/instance/create/create.go index a7fca44c3..1dbdeb7d2 100644 --- a/internal/cmd/logs/instance/create/create.go +++ b/internal/cmd/logs/instance/create/create.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/projectname" "github.com/stackitcloud/stackit-cli/internal/pkg/spinner" @@ -16,7 +16,7 @@ import ( cliErr "github.com/stackitcloud/stackit-cli/internal/pkg/errors" "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/client" - "github.com/stackitcloud/stackit-sdk-go/services/logs/wait" + "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api/wait" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" diff --git a/internal/cmd/logs/instance/create/create_test.go b/internal/cmd/logs/instance/create/create_test.go index 011c37c79..88bdadca0 100644 --- a/internal/cmd/logs/instance/create/create_test.go +++ b/internal/cmd/logs/instance/create/create_test.go @@ -5,7 +5,7 @@ import ( "strconv" "testing" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/testparams" "github.com/stackitcloud/stackit-cli/internal/pkg/testutils" diff --git a/internal/cmd/logs/instance/delete/delete.go b/internal/cmd/logs/instance/delete/delete.go index d00f33fc8..4baa06b0d 100644 --- a/internal/cmd/logs/instance/delete/delete.go +++ b/internal/cmd/logs/instance/delete/delete.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/projectname" "github.com/stackitcloud/stackit-cli/internal/pkg/spinner" @@ -19,7 +19,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs/wait" + "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api/wait" "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/client" logsUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/utils" diff --git a/internal/cmd/logs/instance/delete/delete_test.go b/internal/cmd/logs/instance/delete/delete_test.go index 64501bf2e..5b71fed23 100644 --- a/internal/cmd/logs/instance/delete/delete_test.go +++ b/internal/cmd/logs/instance/delete/delete_test.go @@ -7,7 +7,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/testutils" diff --git a/internal/cmd/logs/instance/describe/describe.go b/internal/cmd/logs/instance/describe/describe.go index b145e6e66..44e486cf3 100644 --- a/internal/cmd/logs/instance/describe/describe.go +++ b/internal/cmd/logs/instance/describe/describe.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/types" diff --git a/internal/cmd/logs/instance/describe/describe_test.go b/internal/cmd/logs/instance/describe/describe_test.go index 49e000d64..1b3839c8d 100644 --- a/internal/cmd/logs/instance/describe/describe_test.go +++ b/internal/cmd/logs/instance/describe/describe_test.go @@ -7,7 +7,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/print" diff --git a/internal/cmd/logs/instance/list/list.go b/internal/cmd/logs/instance/list/list.go index 153a4c2a9..241bdbe2a 100644 --- a/internal/cmd/logs/instance/list/list.go +++ b/internal/cmd/logs/instance/list/list.go @@ -7,7 +7,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/types" "github.com/spf13/cobra" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/errors" diff --git a/internal/cmd/logs/instance/list/list_test.go b/internal/cmd/logs/instance/list/list_test.go index 70fa2ff9a..8f922efac 100644 --- a/internal/cmd/logs/instance/list/list_test.go +++ b/internal/cmd/logs/instance/list/list_test.go @@ -12,7 +12,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/uuid" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/instance/update/update.go b/internal/cmd/logs/instance/update/update.go index 8898a2969..b8ccdcdbd 100644 --- a/internal/cmd/logs/instance/update/update.go +++ b/internal/cmd/logs/instance/update/update.go @@ -18,7 +18,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/utils" "github.com/spf13/cobra" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) const ( diff --git a/internal/cmd/logs/instance/update/update_test.go b/internal/cmd/logs/instance/update/update_test.go index 385fe554d..e46f35e1b 100644 --- a/internal/cmd/logs/instance/update/update_test.go +++ b/internal/cmd/logs/instance/update/update_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/testparams" "github.com/stackitcloud/stackit-cli/internal/pkg/testutils" diff --git a/internal/pkg/services/logs/client/client.go b/internal/pkg/services/logs/client/client.go index a5297b31a..0152e9c81 100644 --- a/internal/pkg/services/logs/client/client.go +++ b/internal/pkg/services/logs/client/client.go @@ -1,7 +1,7 @@ package client import ( - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/config" genericclient "github.com/stackitcloud/stackit-cli/internal/pkg/generic-client" diff --git a/internal/pkg/services/logs/utils/utils.go b/internal/pkg/services/logs/utils/utils.go index d67272254..6d44a9b05 100644 --- a/internal/pkg/services/logs/utils/utils.go +++ b/internal/pkg/services/logs/utils/utils.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) var ( diff --git a/internal/pkg/services/logs/utils/utils_test.go b/internal/pkg/services/logs/utils/utils_test.go index 0f780c1d6..ed7681bfd 100644 --- a/internal/pkg/services/logs/utils/utils_test.go +++ b/internal/pkg/services/logs/utils/utils_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/utils" From 5447fbb129623a6997f32cd227373c3b61a5422f Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 13:41:59 +0200 Subject: [PATCH 03/21] chore(logs): refactor instance create --- internal/cmd/logs/instance/create/create.go | 32 +++++++++++------ .../cmd/logs/instance/create/create_test.go | 36 ++++++++++++++----- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/internal/cmd/logs/instance/create/create.go b/internal/cmd/logs/instance/create/create.go index 1dbdeb7d2..da8ce086f 100644 --- a/internal/cmd/logs/instance/create/create.go +++ b/internal/cmd/logs/instance/create/create.go @@ -3,6 +3,7 @@ package create import ( "context" "fmt" + "math" logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" @@ -87,7 +88,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { } // Call API - req := buildRequest(ctx, model, apiClient) + req, err := buildRequest(ctx, model, apiClient) if err != nil { return err } @@ -98,15 +99,15 @@ func NewCmd(params *types.CmdParams) *cobra.Command { if resp == nil { return fmt.Errorf("create Logs instance: empty response from API") } - if resp.Id == nil { + if len(resp.Id) == 0 { return fmt.Errorf("create Logs instance: instance id missing in response") } - instanceId := *resp.Id + instanceId := resp.Id // Wait for async operation, if async mode not enabled if !model.Async { err := spinner.Run(params.Printer, "Creating instance", func() error { - _, err = wait.CreateLogsInstanceWaitHandler(ctx, apiClient, model.ProjectId, model.Region, instanceId).WaitWithContext(ctx) + _, err = wait.CreateLogsInstanceWaitHandler(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, instanceId).WaitWithContext(ctx) return err }) if err != nil { @@ -149,16 +150,25 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, return &model, nil } -func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiCreateLogsInstanceRequest { - req := apiClient.CreateLogsInstance(ctx, model.ProjectId, model.Region) +func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) (logs.ApiCreateLogsInstanceRequest, error) { + req := apiClient.DefaultAPI.CreateLogsInstance(ctx, model.ProjectId, model.Region) + + var retentionDays int32 + if model.RetentionDays != nil { + val := *model.RetentionDays + if val < 0 || val > math.MaxInt32 { + return req, fmt.Errorf("metrics frequency value %d overflows int32", val) + } + retentionDays = int32(val) + } req = req.CreateLogsInstancePayload(logs.CreateLogsInstancePayload{ - DisplayName: model.DisplayName, + DisplayName: utils.PtrString(model.DisplayName), Description: model.Description, - RetentionDays: model.RetentionDays, - Acl: model.ACL, + RetentionDays: retentionDays, + Acl: utils.PtrValue(model.ACL), }) - return req + return req, nil } func outputResult(p *print.Printer, model *inputModel, projectLabel string, resp *logs.LogsInstance) error { @@ -173,7 +183,7 @@ func outputResult(p *print.Printer, model *inputModel, projectLabel string, resp if model.Async { operationState = "Triggered creation of" } - p.Outputf("%s instance for project %q. Instance ID: %s\n", operationState, projectLabel, utils.PtrString(resp.Id)) + p.Outputf("%s instance for project %q. Instance ID: %s\n", operationState, projectLabel, resp.Id) return nil }) } diff --git a/internal/cmd/logs/instance/create/create_test.go b/internal/cmd/logs/instance/create/create_test.go index 88bdadca0..3f3341885 100644 --- a/internal/cmd/logs/instance/create/create_test.go +++ b/internal/cmd/logs/instance/create/create_test.go @@ -31,7 +31,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() ) @@ -72,12 +72,12 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { // Request func fixtureRequest(mods ...func(request *logs.ApiCreateLogsInstanceRequest)) logs.ApiCreateLogsInstanceRequest { - request := testClient.CreateLogsInstance(testCtx, testProjectId, testRegion) + request := testClient.DefaultAPI.CreateLogsInstance(testCtx, testProjectId, testRegion) request = request.CreateLogsInstancePayload(logs.CreateLogsInstancePayload{ - DisplayName: utils.Ptr(testDisplayName), + DisplayName: testDisplayName, Description: utils.Ptr(testDescription), - RetentionDays: utils.Ptr(int64(testRetentionDays)), - Acl: utils.Ptr([]string{testAcl}), + RetentionDays: testRetentionDays, + Acl: []string{testAcl}, }) for _, mod := range mods { @@ -166,11 +166,13 @@ func TestBuildRequest(t *testing.T) { description string model *inputModel expectedRequest logs.ApiCreateLogsInstanceRequest + isValid bool }{ { description: "base case", model: fixtureInputModel(), expectedRequest: fixtureRequest(), + isValid: true, }, { description: "no optional values", @@ -179,20 +181,38 @@ func TestBuildRequest(t *testing.T) { model.ACL = nil }), expectedRequest: fixtureRequest().CreateLogsInstancePayload(logs.CreateLogsInstancePayload{ - DisplayName: utils.Ptr(testDisplayName), - RetentionDays: utils.Ptr(int64(testRetentionDays)), + DisplayName: testDisplayName, + RetentionDays: int32(testRetentionDays), Description: nil, Acl: nil, }), + isValid: true, + }, + { + description: "retention days not valid", + model: fixtureInputModel(func(model *inputModel) { + model.RetentionDays = utils.Int64Ptr(1 << 31) + }), + expectedRequest: fixtureRequest(), + isValid: false, }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - request := buildRequest(testCtx, tt.model, testClient) + request, err := buildRequest(testCtx, tt.model, testClient) + + if err != nil { + if !tt.isValid { + return + } + t.Fatalf("error building request: %v", err) + } + diff := cmp.Diff(tt.expectedRequest, request, cmp.AllowUnexported(tt.expectedRequest), cmpopts.EquateComparable(testCtx), + cmpopts.IgnoreFields(logs.ApiCreateLogsInstanceRequest{}, "ApiService"), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 8ef4d899c76bd9e5759177f5b2280d07c81f60eb Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 14:09:05 +0200 Subject: [PATCH 04/21] chore(logs): refactor utils --- internal/pkg/services/logs/utils/utils.go | 22 ++------ .../pkg/services/logs/utils/utils_test.go | 55 +++++++------------ 2 files changed, 27 insertions(+), 50 deletions(-) diff --git a/internal/pkg/services/logs/utils/utils.go b/internal/pkg/services/logs/utils/utils.go index 6d44a9b05..16186d618 100644 --- a/internal/pkg/services/logs/utils/utils.go +++ b/internal/pkg/services/logs/utils/utils.go @@ -10,34 +10,24 @@ import ( var ( ErrResponseNil = errors.New("response is nil") - ErrNameNil = errors.New("display name is nil") ) -type LogsClient interface { - GetLogsInstanceExecute(ctx context.Context, projectId, regionId, instanceId string) (*logs.LogsInstance, error) - GetAccessTokenExecute(ctx context.Context, projectId string, regionId string, instanceId string, tId string) (*logs.AccessToken, error) -} - -func GetInstanceName(ctx context.Context, apiClient LogsClient, projectId, regionId, instanceId string) (string, error) { - resp, err := apiClient.GetLogsInstanceExecute(ctx, projectId, regionId, instanceId) +func GetInstanceName(ctx context.Context, apiClient logs.DefaultAPI, projectId, regionId, instanceId string) (string, error) { + resp, err := apiClient.GetLogsInstance(ctx, projectId, regionId, instanceId).Execute() if err != nil { return "", fmt.Errorf("get Logs instance: %w", err) } else if resp == nil { return "", ErrResponseNil - } else if resp.DisplayName == nil { - return "", ErrNameNil } - return *resp.DisplayName, nil + return resp.DisplayName, nil } -func GetAccessTokenName(ctx context.Context, apiClient LogsClient, projectId, regionId, instanceId, accessTokenId string) (string, error) { - resp, err := apiClient.GetAccessTokenExecute(ctx, projectId, regionId, instanceId, accessTokenId) +func GetAccessTokenName(ctx context.Context, apiClient logs.DefaultAPI, projectId, regionId, instanceId, accessTokenId string) (string, error) { + resp, err := apiClient.GetAccessToken(ctx, projectId, regionId, instanceId, accessTokenId).Execute() if err != nil { return "", fmt.Errorf("get Logs access token: %w", err) } else if resp == nil { return "", ErrResponseNil - } else if resp.DisplayName == nil { - return "", ErrNameNil } - return *resp.DisplayName, nil + return resp.DisplayName, nil } diff --git a/internal/pkg/services/logs/utils/utils_test.go b/internal/pkg/services/logs/utils/utils_test.go index ed7681bfd..e51dfdad5 100644 --- a/internal/pkg/services/logs/utils/utils_test.go +++ b/internal/pkg/services/logs/utils/utils_test.go @@ -23,25 +23,28 @@ const ( testRegion = "eu01" ) -type logsClientMocked struct { +type mockSettings struct { getInstanceFails bool getInstanceResp *logs.LogsInstance getAccessTokenFails bool getAccessTokenResp *logs.AccessToken } -func (m *logsClientMocked) GetLogsInstanceExecute(_ context.Context, _, _, _ string) (*logs.LogsInstance, error) { - if m.getInstanceFails { - return nil, fmt.Errorf("could not get instance") - } - return m.getInstanceResp, nil -} - -func (m *logsClientMocked) GetAccessTokenExecute(_ context.Context, _, _, _, _ string) (*logs.AccessToken, error) { - if m.getAccessTokenFails { - return nil, fmt.Errorf("could not get access token") +func newAPIMock(s mockSettings) logs.DefaultAPI { + return &logs.DefaultAPIServiceMock{ + GetLogsInstanceExecuteMock: utils.Ptr(func(_ logs.ApiGetLogsInstanceRequest) (*logs.LogsInstance, error) { + if s.getInstanceFails { + return nil, fmt.Errorf("could not get instance") + } + return s.getInstanceResp, nil + }), + GetAccessTokenExecuteMock: utils.Ptr(func(_ logs.ApiGetAccessTokenRequest) (*logs.AccessToken, error) { + if s.getAccessTokenFails { + return nil, fmt.Errorf("could not get access token") + } + return s.getAccessTokenResp, nil + }), } - return m.getAccessTokenResp, nil } func TestGetInstanceName(t *testing.T) { @@ -55,7 +58,7 @@ func TestGetInstanceName(t *testing.T) { { description: "base", getInstanceResp: &logs.LogsInstance{ - DisplayName: utils.Ptr(testInstanceName), + DisplayName: testInstanceName, }, isValid: true, expectedOutput: testInstanceName, @@ -71,24 +74,16 @@ func TestGetInstanceName(t *testing.T) { getInstanceResp: nil, isValid: false, }, - { - description: "name in response is nil", - getInstanceFails: false, - getInstanceResp: &logs.LogsInstance{ - DisplayName: nil, - }, - isValid: false, - }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - client := &logsClientMocked{ + client := mockSettings{ getInstanceFails: tt.getInstanceFails, getInstanceResp: tt.getInstanceResp, } - output, err := GetInstanceName(context.Background(), client, testProjectId, testRegion, testInstanceId) + output, err := GetInstanceName(context.Background(), newAPIMock(client), testProjectId, testRegion, testInstanceId) if tt.isValid && err != nil { t.Errorf("failed on valid input") @@ -117,7 +112,7 @@ func TestGetAccessTokenName(t *testing.T) { { description: "base", getAccessTokenResp: &logs.AccessToken{ - DisplayName: utils.Ptr(testInstanceName), + DisplayName: testInstanceName, }, isValid: true, expectedOutput: testInstanceName, @@ -133,24 +128,16 @@ func TestGetAccessTokenName(t *testing.T) { getAccessTokenResp: nil, isValid: false, }, - { - description: "name in response is nil", - getAccessTokenFails: false, - getAccessTokenResp: &logs.AccessToken{ - DisplayName: nil, - }, - isValid: false, - }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - client := &logsClientMocked{ + client := mockSettings{ getAccessTokenFails: tt.getAccessTokenFails, getAccessTokenResp: tt.getAccessTokenResp, } - output, err := GetAccessTokenName(context.Background(), client, testProjectId, testRegion, testInstanceId, testAccessTokenId) + output, err := GetAccessTokenName(context.Background(), newAPIMock(client), testProjectId, testRegion, testInstanceId, testAccessTokenId) if tt.isValid && err != nil { t.Errorf("failed on valid input") From 409840155c1d31cc8c75fd7149c1ceeec255dda8 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 14:09:12 +0200 Subject: [PATCH 05/21] chore(logs): refactor delete --- internal/cmd/logs/instance/delete/delete.go | 6 +++--- internal/cmd/logs/instance/delete/delete_test.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/cmd/logs/instance/delete/delete.go b/internal/cmd/logs/instance/delete/delete.go index 4baa06b0d..8ffa95e44 100644 --- a/internal/cmd/logs/instance/delete/delete.go +++ b/internal/cmd/logs/instance/delete/delete.go @@ -66,7 +66,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { projectLabel = model.ProjectId } - instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceID) + instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceID) if err != nil { params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err) instanceLabel = model.InstanceID @@ -89,7 +89,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { // Wait for async operation, if async mode not enabled if !model.Async { err := spinner.Run(params.Printer, "Deleting instance", func() error { - _, err = wait.DeleteLogsInstanceWaitHandler(ctx, apiClient, model.ProjectId, model.Region, model.InstanceID).WaitWithContext(ctx) + _, err = wait.DeleteLogsInstanceWaitHandler(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceID).WaitWithContext(ctx) return err }) if err != nil { @@ -127,6 +127,6 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiDeleteLogsInstanceRequest { - req := apiClient.DeleteLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID) + req := apiClient.DefaultAPI.DeleteLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID) return req } diff --git a/internal/cmd/logs/instance/delete/delete_test.go b/internal/cmd/logs/instance/delete/delete_test.go index 5b71fed23..e9f7e9d97 100644 --- a/internal/cmd/logs/instance/delete/delete_test.go +++ b/internal/cmd/logs/instance/delete/delete_test.go @@ -21,7 +21,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() ) @@ -67,7 +67,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { // Request func fixtureRequest(mods ...func(request *logs.ApiDeleteLogsInstanceRequest)) logs.ApiDeleteLogsInstanceRequest { - request := testClient.DeleteLogsInstance(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.DeleteLogsInstance(testCtx, testProjectId, testRegion, testInstanceId) for _, mod := range mods { mod(&request) } @@ -165,7 +165,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 0828dccd187751d8861c0ef770498448f413a1c9 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 14:10:02 +0200 Subject: [PATCH 06/21] chore(logs): refactor client --- internal/pkg/services/logs/client/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/pkg/services/logs/client/client.go b/internal/pkg/services/logs/client/client.go index 0152e9c81..fa8abe391 100644 --- a/internal/pkg/services/logs/client/client.go +++ b/internal/pkg/services/logs/client/client.go @@ -11,5 +11,5 @@ import ( ) func ConfigureClient(p *print.Printer, cliVersion string) (*logs.APIClient, error) { - return genericclient.ConfigureClientGeneric(p, cliVersion, viper.GetString(config.LogsCustomEndpointKey), false, genericclient.CreateApiClient[*logs.APIClient](logs.NewAPIClient)) + return genericclient.ConfigureClientGeneric(p, cliVersion, viper.GetString(config.LogsCustomEndpointKey), false, logs.NewAPIClient) } From d49c4d672b7461726c21a8de0ea6f8cc55a7ccef Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 14:12:41 +0200 Subject: [PATCH 07/21] chore(logs): refactor instance describe --- internal/cmd/logs/instance/describe/describe.go | 10 +++++----- internal/cmd/logs/instance/describe/describe_test.go | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/cmd/logs/instance/describe/describe.go b/internal/cmd/logs/instance/describe/describe.go index 44e486cf3..fa37d0c8e 100644 --- a/internal/cmd/logs/instance/describe/describe.go +++ b/internal/cmd/logs/instance/describe/describe.go @@ -84,7 +84,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiGetLogsInstanceRequest { - return apiClient.GetLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID) + return apiClient.DefaultAPI.GetLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID) } func outputResult(p *print.Printer, outputFormat string, instance *logs.LogsInstance) error { @@ -93,13 +93,13 @@ func outputResult(p *print.Printer, outputFormat string, instance *logs.LogsInst } return p.OutputResult(outputFormat, instance, func() error { table := tables.NewTable() - table.AddRow("ID", utils.PtrString(instance.Id)) + table.AddRow("ID", instance.Id) table.AddSeparator() - table.AddRow("DISPLAY NAME", utils.PtrString(instance.DisplayName)) + table.AddRow("DISPLAY NAME", instance.DisplayName) table.AddSeparator() - table.AddRow("RETENTION DAYS", utils.PtrString(instance.RetentionDays)) + table.AddRow("RETENTION DAYS", instance.RetentionDays) table.AddSeparator() - table.AddRow("ACL IP RANGES", utils.PtrString(instance.Acl)) + table.AddRow("ACL IP RANGES", instance.Acl) table.AddSeparator() table.AddRow("DATA SOURCE", utils.PtrString(instance.DatasourceUrl)) table.AddSeparator() diff --git a/internal/cmd/logs/instance/describe/describe_test.go b/internal/cmd/logs/instance/describe/describe_test.go index 1b3839c8d..13b11a75a 100644 --- a/internal/cmd/logs/instance/describe/describe_test.go +++ b/internal/cmd/logs/instance/describe/describe_test.go @@ -18,7 +18,7 @@ import ( type testCtxKey struct{} var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") -var testClient = &logs.APIClient{} +var testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} var testProjectId = uuid.NewString() var testInstanceId = uuid.NewString() @@ -51,7 +51,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiGetLogsInstanceRequest)) logs.ApiGetLogsInstanceRequest { - request := testClient.GetLogsInstance(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.GetLogsInstance(testCtx, testProjectId, testRegion, testInstanceId) for _, mod := range mods { mod(&request) } @@ -140,7 +140,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From d5a7dea8aa4c1abcdcf9d68947a027f9793a3eeb Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 14:13:30 +0200 Subject: [PATCH 08/21] chore(logs): refactor instance list --- internal/cmd/logs/instance/list/list.go | 9 ++++----- internal/cmd/logs/instance/list/list_test.go | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/internal/cmd/logs/instance/list/list.go b/internal/cmd/logs/instance/list/list.go index 241bdbe2a..ac2d29497 100644 --- a/internal/cmd/logs/instance/list/list.go +++ b/internal/cmd/logs/instance/list/list.go @@ -18,7 +18,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/projectname" "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/client" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" - "github.com/stackitcloud/stackit-cli/internal/pkg/utils" ) type inputModel struct { @@ -117,7 +116,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiListLogsInstancesRequest { - request := apiClient.ListLogsInstances(ctx, model.ProjectId, model.Region) + request := apiClient.DefaultAPI.ListLogsInstances(ctx, model.ProjectId, model.Region) return request } @@ -133,9 +132,9 @@ func outputResult(p *print.Printer, outputFormat, projectLabel string, instances table.SetHeader("NAME", "ID", "STATUS") for _, instance := range instances { table.AddRow( - utils.PtrString(instance.DisplayName), - utils.PtrString(instance.Id), - utils.PtrString(instance.Status), + instance.DisplayName, + instance.Id, + instance.Status, ) } err := table.Display(p) diff --git a/internal/cmd/logs/instance/list/list_test.go b/internal/cmd/logs/instance/list/list_test.go index 8f922efac..8da19f2a4 100644 --- a/internal/cmd/logs/instance/list/list_test.go +++ b/internal/cmd/logs/instance/list/list_test.go @@ -53,7 +53,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiListLogsInstancesRequest)) logs.ApiListLogsInstancesRequest { - request := testClient.ListLogsInstances(testCtx, testProjectId, testRegion) + request := testClient.DefaultAPI.ListLogsInstances(testCtx, testProjectId, testRegion) for _, mod := range mods { mod(&request) } From ec6d17b921491b8e8d7952ba25f2884bdf5e4487 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 14:45:27 +0200 Subject: [PATCH 09/21] chore(logs): refactored instance create and update and reworked RetentionDays --- internal/cmd/logs/instance/create/create.go | 30 +++++-------------- .../cmd/logs/instance/create/create_test.go | 23 +++----------- internal/cmd/logs/instance/update/update.go | 15 +++++----- .../cmd/logs/instance/update/update_test.go | 15 +++++----- 4 files changed, 28 insertions(+), 55 deletions(-) diff --git a/internal/cmd/logs/instance/create/create.go b/internal/cmd/logs/instance/create/create.go index da8ce086f..0fa374a0d 100644 --- a/internal/cmd/logs/instance/create/create.go +++ b/internal/cmd/logs/instance/create/create.go @@ -3,7 +3,6 @@ package create import ( "context" "fmt" - "math" logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" @@ -37,7 +36,7 @@ type inputModel struct { *globalflags.GlobalFlagModel DisplayName *string - RetentionDays *int64 + RetentionDays *int32 ACL *[]string Description *string } @@ -88,10 +87,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { } // Call API - req, err := buildRequest(ctx, model, apiClient) - if err != nil { - return err - } + req := buildRequest(ctx, model, apiClient) resp, err := req.Execute() if err != nil { return fmt.Errorf("create Logs instance: %w", err) @@ -126,7 +122,7 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().String(displayNameFlag, "", "Display name") cmd.Flags().String(descriptionFlag, "", "Description") cmd.Flags().StringSlice(aclFlag, []string{}, "Access control list") - cmd.Flags().Int64(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up") + cmd.Flags().Int32(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up") err := flags.MarkFlagsRequired(cmd, displayNameFlag, retentionDaysFlag) cobra.CheckErr(err) @@ -141,7 +137,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, model := inputModel{ GlobalFlagModel: globalFlags, DisplayName: flags.FlagToStringPointer(p, cmd, displayNameFlag), - RetentionDays: flags.FlagToInt64Pointer(p, cmd, retentionDaysFlag), + RetentionDays: flags.FlagToInt32Pointer(p, cmd, retentionDaysFlag), Description: flags.FlagToStringPointer(p, cmd, descriptionFlag), ACL: flags.FlagToStringSlicePointer(p, cmd, aclFlag), } @@ -150,25 +146,15 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, return &model, nil } -func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) (logs.ApiCreateLogsInstanceRequest, error) { +func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiCreateLogsInstanceRequest { req := apiClient.DefaultAPI.CreateLogsInstance(ctx, model.ProjectId, model.Region) - - var retentionDays int32 - if model.RetentionDays != nil { - val := *model.RetentionDays - if val < 0 || val > math.MaxInt32 { - return req, fmt.Errorf("metrics frequency value %d overflows int32", val) - } - retentionDays = int32(val) - } - req = req.CreateLogsInstancePayload(logs.CreateLogsInstancePayload{ DisplayName: utils.PtrString(model.DisplayName), Description: model.Description, - RetentionDays: retentionDays, - Acl: utils.PtrValue(model.ACL), + RetentionDays: utils.PtrValue(model.RetentionDays), + Acl: utils.GetSliceFromPointer(model.ACL), }) - return req, nil + return req } func outputResult(p *print.Printer, model *inputModel, projectLabel string, resp *logs.LogsInstance) error { diff --git a/internal/cmd/logs/instance/create/create_test.go b/internal/cmd/logs/instance/create/create_test.go index 3f3341885..58125de3b 100644 --- a/internal/cmd/logs/instance/create/create_test.go +++ b/internal/cmd/logs/instance/create/create_test.go @@ -61,7 +61,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { }, DisplayName: utils.Ptr(testDisplayName), Description: utils.Ptr(testDescription), - RetentionDays: utils.Ptr(int64(testRetentionDays)), + RetentionDays: utils.Ptr(int32(testRetentionDays)), ACL: utils.Ptr([]string{testAcl}), } for _, mod := range mods { @@ -188,31 +188,16 @@ func TestBuildRequest(t *testing.T) { }), isValid: true, }, - { - description: "retention days not valid", - model: fixtureInputModel(func(model *inputModel) { - model.RetentionDays = utils.Int64Ptr(1 << 31) - }), - expectedRequest: fixtureRequest(), - isValid: false, - }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - request, err := buildRequest(testCtx, tt.model, testClient) - - if err != nil { - if !tt.isValid { - return - } - t.Fatalf("error building request: %v", err) - } - + request := buildRequest(testCtx, tt.model, testClient) diff := cmp.Diff(tt.expectedRequest, request, cmp.AllowUnexported(tt.expectedRequest), cmpopts.EquateComparable(testCtx), - cmpopts.IgnoreFields(logs.ApiCreateLogsInstanceRequest{}, "ApiService"), + cmpopts.IgnoreFields(tt.expectedRequest, "ApiService"), + cmpopts.EquateEmpty(), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) diff --git a/internal/cmd/logs/instance/update/update.go b/internal/cmd/logs/instance/update/update.go index b8ccdcdbd..e370d104e 100644 --- a/internal/cmd/logs/instance/update/update.go +++ b/internal/cmd/logs/instance/update/update.go @@ -34,7 +34,7 @@ type inputModel struct { *globalflags.GlobalFlagModel InstanceID string DisplayName *string - RetentionDays *int64 + RetentionDays *int32 ACL *[]string Description *string } @@ -77,7 +77,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { projectLabel = model.ProjectId } - instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceID) + instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceID) if err != nil { params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err) instanceLabel = model.InstanceID @@ -108,7 +108,7 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().String(displayNameFlag, "", "Display name") cmd.Flags().String(descriptionFlag, "", "Description") cmd.Flags().StringSlice(aclFlag, []string{}, "Access control list") - cmd.Flags().Int64(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up") + cmd.Flags().Int32(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up") } func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) { @@ -120,7 +120,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } displayName := flags.FlagToStringPointer(p, cmd, displayNameFlag) - retentionDays := flags.FlagToInt64Pointer(p, cmd, retentionDaysFlag) + retentionDays := flags.FlagToInt32Pointer(p, cmd, retentionDaysFlag) acl := flags.FlagToStringSlicePointer(p, cmd, aclFlag) description := flags.FlagToStringPointer(p, cmd, descriptionFlag) @@ -142,10 +142,11 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiUpdateLogsInstanceRequest { - req := apiClient.UpdateLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID) + req := apiClient.DefaultAPI.UpdateLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID) + req = req.UpdateLogsInstancePayload(logs.UpdateLogsInstancePayload{ DisplayName: model.DisplayName, - Acl: model.ACL, + Acl: utils.PtrValue(model.ACL), RetentionDays: model.RetentionDays, Description: model.Description, }) @@ -159,7 +160,7 @@ func outputResult(p *print.Printer, model *inputModel, projectLabel string, inst return fmt.Errorf("input model is nil") } return p.OutputResult(model.OutputFormat, instance, func() error { - p.Outputf("Updated instance %q for project %q.\n", utils.PtrString(instance.DisplayName), projectLabel) + p.Outputf("Updated instance %q for project %q.\n", instance.DisplayName, projectLabel) return nil }) } diff --git a/internal/cmd/logs/instance/update/update_test.go b/internal/cmd/logs/instance/update/update_test.go index e46f35e1b..f7d54f07b 100644 --- a/internal/cmd/logs/instance/update/update_test.go +++ b/internal/cmd/logs/instance/update/update_test.go @@ -26,7 +26,7 @@ const ( var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() ) @@ -66,7 +66,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { InstanceID: testInstanceId, DisplayName: utils.Ptr("name"), ACL: utils.Ptr([]string{"0.0.0.0/0"}), - RetentionDays: utils.Ptr(int64(60)), + RetentionDays: utils.Ptr(int32(60)), Description: utils.Ptr("Example"), } for _, mod := range mods { @@ -76,11 +76,11 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiUpdateLogsInstanceRequest)) logs.ApiUpdateLogsInstanceRequest { - request := testClient.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId) request = request.UpdateLogsInstancePayload(logs.UpdateLogsInstancePayload{ DisplayName: utils.Ptr("name"), - Acl: utils.Ptr([]string{"0.0.0.0/0"}), - RetentionDays: utils.Ptr(int64(60)), + Acl: []string{"0.0.0.0/0"}, + RetentionDays: utils.Ptr(int32(60)), Description: utils.Ptr("Example"), }) for _, mod := range mods { @@ -160,7 +160,7 @@ func TestParseInput(t *testing.T) { InstanceID: testInstanceId, DisplayName: utils.Ptr("display-name"), ACL: utils.Ptr([]string{"0.0.0.0/24"}), - RetentionDays: utils.Ptr(int64(60)), + RetentionDays: utils.Ptr(int32(60)), Description: utils.Ptr("description"), }, }, @@ -230,7 +230,7 @@ func TestBuildRequest(t *testing.T) { }, InstanceID: testInstanceId, }, - expectedRequest: testClient.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId). + expectedRequest: testClient.DefaultAPI.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId). UpdateLogsInstancePayload(logs.UpdateLogsInstancePayload{}), }, } @@ -242,6 +242,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), cmpopts.EquateComparable(testCtx), + cmpopts.IgnoreFields(tt.expectedRequest, "ApiService"), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 90cbdf59e11f7d7e8995235596b8c67b92212a35 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 15:42:20 +0200 Subject: [PATCH 10/21] chore(logs): refactored access token create --- .../cmd/logs/access_token/create/create.go | 21 +++++++----- .../logs/access_token/create/create_test.go | 34 +++++++++++-------- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/internal/cmd/logs/access_token/create/create.go b/internal/cmd/logs/access_token/create/create.go index f0027858a..05b87ed25 100644 --- a/internal/cmd/logs/access_token/create/create.go +++ b/internal/cmd/logs/access_token/create/create.go @@ -35,7 +35,7 @@ type inputModel struct { InstanceId string Description *string DisplayName string - Lifetime *int64 + Lifetime *int32 Permissions []string } @@ -80,7 +80,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { projectLabel = model.ProjectId } - instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceId) + instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceId) if err != nil { params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err) instanceLabel = model.InstanceId @@ -110,7 +110,7 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().Var(flags.UUIDFlag(), instanceIdFlag, "ID of the Logs instance") cmd.Flags().String(displayNameFlag, "", "Display name for the access token") cmd.Flags().String(descriptionFlag, "", "Description of the access token") - cmd.Flags().Int64(lifetimeFlag, 0, "Lifetime of the access token in days [1 - 180]") + cmd.Flags().Int32(lifetimeFlag, 0, "Lifetime of the access token in days [1 - 180]") cmd.Flags().StringSlice(permissionsFlag, []string{}, `Permissions of the access token ["read" "write"]`) err := flags.MarkFlagsRequired(cmd, instanceIdFlag, displayNameFlag, permissionsFlag) @@ -128,7 +128,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, DisplayName: flags.FlagToStringValue(p, cmd, displayNameFlag), InstanceId: flags.FlagToStringValue(p, cmd, instanceIdFlag), Description: flags.FlagToStringPointer(p, cmd, descriptionFlag), - Lifetime: flags.FlagToInt64Pointer(p, cmd, lifetimeFlag), + Lifetime: flags.FlagToInt32Pointer(p, cmd, lifetimeFlag), Permissions: flags.FlagToStringSliceValue(p, cmd, permissionsFlag), } @@ -137,13 +137,16 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiCreateAccessTokenRequest { - req := apiClient.CreateAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId) - + req := apiClient.DefaultAPI.CreateAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId) + permissions := make([]logs.PermissionsInner, len(model.Permissions)) + for i, permission := range model.Permissions { + permissions[i] = logs.PermissionsInner(permission) + } return req.CreateAccessTokenPayload(logs.CreateAccessTokenPayload{ Description: model.Description, - DisplayName: &model.DisplayName, + DisplayName: model.DisplayName, Lifetime: model.Lifetime, - Permissions: &model.Permissions, + Permissions: permissions, }) } @@ -152,7 +155,7 @@ func outputResult(p *print.Printer, outputFormat, instanceLabel string, accessTo return fmt.Errorf("access token cannot be nil") } return p.OutputResult(outputFormat, accessToken, func() error { - p.Outputf("Created access token for Logs instance %q.\n\nID: %s\nToken: %s\n", instanceLabel, utils.PtrValue(accessToken.Id), utils.PtrValue(accessToken.AccessToken)) + p.Outputf("Created access token for Logs instance %q.\n\nID: %s\nToken: %s\n", instanceLabel, accessToken.Id, utils.PtrValue(accessToken.AccessToken)) return nil }) } diff --git a/internal/cmd/logs/access_token/create/create_test.go b/internal/cmd/logs/access_token/create/create_test.go index 986f83657..c06364352 100644 --- a/internal/cmd/logs/access_token/create/create_test.go +++ b/internal/cmd/logs/access_token/create/create_test.go @@ -26,7 +26,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() ) @@ -59,7 +59,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { InstanceId: testInstanceId, Description: utils.Ptr(testDescription), DisplayName: testDisplayName, - Lifetime: utils.Ptr(int64(0)), + Lifetime: utils.Ptr(int32(0)), Permissions: []string{ "read", "write", @@ -72,7 +72,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiCreateAccessTokenRequest)) logs.ApiCreateAccessTokenRequest { - request := testClient.CreateAccessToken(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.CreateAccessToken(testCtx, testProjectId, testRegion, testInstanceId) request = request.CreateAccessTokenPayload(fixturePayload()) for _, mod := range mods { mod(&request) @@ -82,13 +82,13 @@ func fixtureRequest(mods ...func(request *logs.ApiCreateAccessTokenRequest)) log func fixturePayload(mods ...func(payload *logs.CreateAccessTokenPayload)) logs.CreateAccessTokenPayload { payload := logs.CreateAccessTokenPayload{ - DisplayName: utils.Ptr(testDisplayName), + DisplayName: testDisplayName, Description: utils.Ptr(testDescription), - Lifetime: utils.Ptr(int64(0)), - Permissions: utils.Ptr([]string{ + Lifetime: utils.Ptr(int32(0)), + Permissions: []logs.PermissionsInner{ "read", "write", - }), + }, } for _, mod := range mods { mod(&payload) @@ -192,7 +192,9 @@ func TestParseInput(t *testing.T) { for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - testutils.TestParseInput(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, tt.isValid) + testutils.TestParseInputWithOptions(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, nil, tt.isValid, []testutils.TestingOption{ + testutils.WithCmpOptions(cmpopts.EquateEmpty()), + }) }) } } @@ -216,6 +218,8 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(tt.expectedRequest, request, cmp.AllowUnexported(tt.expectedRequest), cmpopts.EquateComparable(testCtx), + cmpopts.IgnoreFields(tt.expectedRequest, "ApiService"), + cmpopts.EquateEmpty(), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) @@ -240,16 +244,16 @@ func TestOutputResult(t *testing.T) { args: args{ instanceLabel: "", accessToken: utils.Ptr(logs.AccessToken{ - Id: utils.Ptr(uuid.NewString()), - Permissions: utils.Ptr([]string{ + Id: uuid.NewString(), + Permissions: []logs.PermissionsInner{ "read", "write", - }), - DisplayName: utils.Ptr("Token"), + }, + DisplayName: "Token", AccessToken: utils.Ptr("Secret access token"), - Creator: utils.Ptr(uuid.NewString()), - Expires: utils.Ptr(false), - Status: utils.Ptr(logs.ACCESSTOKENSTATUS_ACTIVE), + Creator: uuid.NewString(), + Expires: false, + Status: logs.ACCESSTOKENSTATUS_ACTIVE, }), }, wantErr: false, From 7a771cb46f64ebf7eea2b3edaee2458a0fe47876 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:21:41 +0200 Subject: [PATCH 11/21] chore(logs): redo using highest level testutils func --- internal/cmd/logs/access_token/create/create_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/cmd/logs/access_token/create/create_test.go b/internal/cmd/logs/access_token/create/create_test.go index c06364352..84e3ab150 100644 --- a/internal/cmd/logs/access_token/create/create_test.go +++ b/internal/cmd/logs/access_token/create/create_test.go @@ -192,9 +192,7 @@ func TestParseInput(t *testing.T) { for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { - testutils.TestParseInputWithOptions(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, nil, tt.isValid, []testutils.TestingOption{ - testutils.WithCmpOptions(cmpopts.EquateEmpty()), - }) + testutils.TestParseInput(t, NewCmd, parseInput, tt.expectedModel, tt.argValues, tt.flagValues, tt.isValid) }) } } From 8e40ee0b3f85725ac1cc533e2e61b529fa5ed605 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:23:31 +0200 Subject: [PATCH 12/21] chore(logs): refactor access token delete --- internal/cmd/logs/access_token/delete/delete.go | 4 ++-- internal/cmd/logs/access_token/delete/delete_test.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/cmd/logs/access_token/delete/delete.go b/internal/cmd/logs/access_token/delete/delete.go index a580e66f4..62761727e 100644 --- a/internal/cmd/logs/access_token/delete/delete.go +++ b/internal/cmd/logs/access_token/delete/delete.go @@ -58,7 +58,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { } // Get the display name for confirmation - accessTokenLabel, err := logUtils.GetAccessTokenName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) + accessTokenLabel, err := logUtils.GetAccessTokenName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) if err != nil { params.Printer.Debug(print.ErrorLevel, "get access token: %v", err) } @@ -113,5 +113,5 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiDeleteAccessTokenRequest { - return apiClient.DeleteAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) + return apiClient.DefaultAPI.DeleteAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) } diff --git a/internal/cmd/logs/access_token/delete/delete_test.go b/internal/cmd/logs/access_token/delete/delete_test.go index 24c18767c..c5af8ad8e 100644 --- a/internal/cmd/logs/access_token/delete/delete_test.go +++ b/internal/cmd/logs/access_token/delete/delete_test.go @@ -21,7 +21,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() @@ -69,7 +69,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiDeleteAccessTokenRequest)) logs.ApiDeleteAccessTokenRequest { - request := testClient.DeleteAccessToken(testCtx, testProjectId, testRegion, testInstanceId, testAccessTokenId) + request := testClient.DefaultAPI.DeleteAccessToken(testCtx, testProjectId, testRegion, testInstanceId, testAccessTokenId) for _, mod := range mods { mod(&request) } @@ -197,7 +197,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 95985630b79a4e6279f2f12fae2a34ca6d9e9691 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:25:03 +0200 Subject: [PATCH 13/21] chore(logs): refactor access token delete all --- .../cmd/logs/access_token/delete_all/delete_all.go | 12 +++++------- .../logs/access_token/delete_all/delete_all_test.go | 6 +++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/internal/cmd/logs/access_token/delete_all/delete_all.go b/internal/cmd/logs/access_token/delete_all/delete_all.go index d0625fabf..8492a2f9b 100644 --- a/internal/cmd/logs/access_token/delete_all/delete_all.go +++ b/internal/cmd/logs/access_token/delete_all/delete_all.go @@ -7,16 +7,14 @@ import ( logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" - "github.com/stackitcloud/stackit-cli/internal/pkg/flags" - "github.com/stackitcloud/stackit-cli/internal/pkg/types" - "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - "github.com/stackitcloud/stackit-cli/internal/pkg/errors" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" + "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/client" logUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/utils" + "github.com/stackitcloud/stackit-cli/internal/pkg/types" "github.com/spf13/cobra" ) @@ -55,7 +53,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return err } - instanceLabel, err := logUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceId) + instanceLabel, err := logUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceId) if err != nil { params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err) instanceLabel = model.InstanceId @@ -77,7 +75,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return fmt.Errorf("delete all access token: nil result") } - params.Printer.Outputf("Deleted %d access token(s)\n", len(utils.PtrValue(items.Tokens))) + params.Printer.Outputf("Deleted %d access token(s)\n", len(items.Tokens)) return nil }, } @@ -108,5 +106,5 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiDeleteAllAccessTokensRequest { - return apiClient.DeleteAllAccessTokens(ctx, model.ProjectId, model.Region, model.InstanceId) + return apiClient.DefaultAPI.DeleteAllAccessTokens(ctx, model.ProjectId, model.Region, model.InstanceId) } diff --git a/internal/cmd/logs/access_token/delete_all/delete_all_test.go b/internal/cmd/logs/access_token/delete_all/delete_all_test.go index 0570c701c..0dce66c89 100644 --- a/internal/cmd/logs/access_token/delete_all/delete_all_test.go +++ b/internal/cmd/logs/access_token/delete_all/delete_all_test.go @@ -21,7 +21,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() @@ -57,7 +57,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiDeleteAllAccessTokensRequest)) logs.ApiDeleteAllAccessTokensRequest { - request := testClient.DeleteAllAccessTokens(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.DeleteAllAccessTokens(testCtx, testProjectId, testRegion, testInstanceId) for _, mod := range mods { mod(&request) } @@ -153,7 +153,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From ac06109c39f5b26cae90b658c61e7bb4bd76f06f Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:27:56 +0200 Subject: [PATCH 14/21] chore(logs): refactor access token delete all expired --- .../delete_all_expired/delete_all_expired.go | 14 ++++++-------- .../delete_all_expired/delete_all_expired_test.go | 6 +++--- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go index 96cfabc7d..1c4b540d0 100644 --- a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go +++ b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired.go @@ -7,16 +7,14 @@ import ( logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/stackit-cli/internal/pkg/args" - "github.com/stackitcloud/stackit-cli/internal/pkg/flags" - "github.com/stackitcloud/stackit-cli/internal/pkg/types" - "github.com/stackitcloud/stackit-cli/internal/pkg/utils" - "github.com/stackitcloud/stackit-cli/internal/pkg/errors" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" + "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/client" logUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/logs/utils" + "github.com/stackitcloud/stackit-cli/internal/pkg/types" "github.com/spf13/cobra" ) @@ -55,7 +53,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return err } - instanceLabel, err := logUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceId) + instanceLabel, err := logUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceId) if err != nil { params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err) instanceLabel = model.InstanceId @@ -77,7 +75,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { return fmt.Errorf("delete all expired access token: nil result") } - params.Printer.Outputf("Deleted %d expired access token(s)\n", len(utils.PtrValue(items.Tokens))) + params.Printer.Outputf("Deleted %d expired access token(s)\n", len(items.Tokens)) return nil }, } @@ -107,6 +105,6 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, return &model, nil } -func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiDeleteAllAccessTokensRequest { - return apiClient.DeleteAllExpiredAccessTokens(ctx, model.ProjectId, model.Region, model.InstanceId) +func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiDeleteAllExpiredAccessTokensRequest { + return apiClient.DefaultAPI.DeleteAllExpiredAccessTokens(ctx, model.ProjectId, model.Region, model.InstanceId) } diff --git a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go index 752b7a2b7..75d223e35 100644 --- a/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go +++ b/internal/cmd/logs/access_token/delete_all_expired/delete_all_expired_test.go @@ -21,7 +21,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() @@ -57,7 +57,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiDeleteAllExpiredAccessTokensRequest)) logs.ApiDeleteAllExpiredAccessTokensRequest { - request := testClient.DeleteAllExpiredAccessTokens(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.DeleteAllExpiredAccessTokens(testCtx, testProjectId, testRegion, testInstanceId) for _, mod := range mods { mod(&request) } @@ -153,7 +153,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 32cb71a410fd86de0171d6b2d0f76121c05f6f2e Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:32:24 +0200 Subject: [PATCH 15/21] chore(logs): refactor access token describe --- .../logs/access_token/describe/describe.go | 16 +++++++-------- .../access_token/describe/describe_test.go | 20 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/internal/cmd/logs/access_token/describe/describe.go b/internal/cmd/logs/access_token/describe/describe.go index 7e12a2931..841ed8c27 100644 --- a/internal/cmd/logs/access_token/describe/describe.go +++ b/internal/cmd/logs/access_token/describe/describe.go @@ -101,7 +101,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiGetAccessTokenRequest { - return apiClient.GetAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) + return apiClient.DefaultAPI.GetAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) } func outputResult(p *print.Printer, outputFormat string, token *logs.AccessToken) error { @@ -110,21 +110,21 @@ func outputResult(p *print.Printer, outputFormat string, token *logs.AccessToken } return p.OutputResult(outputFormat, token, func() error { table := tables.NewTable() - table.AddRow("ID", utils.PtrString(token.Id)) + table.AddRow("ID", token.Id) table.AddSeparator() - table.AddRow("DISPLAY NAME", utils.PtrString(token.DisplayName)) + table.AddRow("DISPLAY NAME", token.DisplayName) table.AddSeparator() table.AddRow("DESCRIPTION", utils.PtrString(token.Description)) table.AddSeparator() - table.AddRow("PERMISSIONS", utils.PtrString(token.Permissions)) + table.AddRow("PERMISSIONS", token.Permissions) table.AddSeparator() - table.AddRow("CREATOR", utils.PtrString(token.Creator)) + table.AddRow("CREATOR", token.Creator) table.AddSeparator() - table.AddRow("STATE", utils.PtrString(token.Status)) + table.AddRow("STATE", token.Status) table.AddSeparator() - table.AddRow("EXPIRES", utils.PtrString(token.Expires)) + table.AddRow("EXPIRES", token.Expires) table.AddSeparator() - table.AddRow("VALID UNTIL", utils.PtrString(token.ValidUntil)) + table.AddRow("VALID UNTIL", token.ValidUntil) table.AddSeparator() err := table.Display(p) diff --git a/internal/cmd/logs/access_token/describe/describe_test.go b/internal/cmd/logs/access_token/describe/describe_test.go index 357ed1689..4817dea9f 100644 --- a/internal/cmd/logs/access_token/describe/describe_test.go +++ b/internal/cmd/logs/access_token/describe/describe_test.go @@ -23,7 +23,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() @@ -71,7 +71,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiGetAccessTokenRequest)) logs.ApiGetAccessTokenRequest { - request := testClient.GetAccessToken(testCtx, testProjectId, testRegion, testInstanceId, testAccessTokenId) + request := testClient.DefaultAPI.GetAccessToken(testCtx, testProjectId, testRegion, testInstanceId, testAccessTokenId) for _, mod := range mods { mod(&request) } @@ -199,7 +199,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) @@ -222,16 +222,16 @@ func TestOutputResult(t *testing.T) { name: "base", args: args{ accessToken: utils.Ptr(logs.AccessToken{ - Id: utils.Ptr(uuid.NewString()), - Permissions: utils.Ptr([]string{ + Id: uuid.NewString(), + Permissions: []logs.PermissionsInner{ "read", "write", - }), - DisplayName: utils.Ptr("Token"), + }, + DisplayName: "Token", AccessToken: utils.Ptr("Secret access token"), - Creator: utils.Ptr(uuid.NewString()), - Expires: utils.Ptr(false), - Status: utils.Ptr(logs.ACCESSTOKENSTATUS_ACTIVE), + Creator: uuid.NewString(), + Expires: false, + Status: logs.ACCESSTOKENSTATUS_ACTIVE, }), }, wantErr: false, From d0aaf1785a252d5c7ccc11fd6a17971edcde4800 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:35:29 +0200 Subject: [PATCH 16/21] chore(logs): refactor access token list --- internal/cmd/logs/access_token/list/list.go | 12 +++++------ .../cmd/logs/access_token/list/list_test.go | 20 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/internal/cmd/logs/access_token/list/list.go b/internal/cmd/logs/access_token/list/list.go index 330ca3449..0843bc6c2 100644 --- a/internal/cmd/logs/access_token/list/list.go +++ b/internal/cmd/logs/access_token/list/list.go @@ -82,7 +82,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { } // Truncate output - items := utils.PtrValue(resp.Tokens) + items := resp.Tokens if model.Limit != nil && len(items) > int(*model.Limit) { items = items[:*model.Limit] } @@ -127,7 +127,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiListAccessTokensRequest { - return apiClient.ListAccessTokens(ctx, model.ProjectId, model.Region, model.InstanceId) + return apiClient.DefaultAPI.ListAccessTokens(ctx, model.ProjectId, model.Region, model.InstanceId) } func outputResult(p *print.Printer, outputFormat string, tokens []logs.AccessToken, projectLabel string) error { @@ -142,12 +142,12 @@ func outputResult(p *print.Printer, outputFormat string, tokens []logs.AccessTok for _, token := range tokens { table.AddRow( - utils.PtrString(token.Id), - utils.PtrString(token.DisplayName), + token.Id, + token.DisplayName, utils.PtrString(token.Description), - utils.PtrString(token.Permissions), + token.Permissions, utils.PtrString(token.ValidUntil), - utils.PtrString(token.Status), + token.Status, ) table.AddSeparator() } diff --git a/internal/cmd/logs/access_token/list/list_test.go b/internal/cmd/logs/access_token/list/list_test.go index 8bc929206..0ce2bc671 100644 --- a/internal/cmd/logs/access_token/list/list_test.go +++ b/internal/cmd/logs/access_token/list/list_test.go @@ -23,7 +23,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() @@ -61,7 +61,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiListAccessTokensRequest)) logs.ApiListAccessTokensRequest { - request := testClient.ListAccessTokens(testCtx, testProjectId, testRegion, testInstanceId) + request := testClient.DefaultAPI.ListAccessTokens(testCtx, testProjectId, testRegion, testInstanceId) for _, mod := range mods { mod(&request) } @@ -171,7 +171,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) @@ -196,16 +196,16 @@ func TestOutputResult(t *testing.T) { args: args{ accessTokens: []logs.AccessToken{ { - Id: utils.Ptr(uuid.NewString()), - Permissions: utils.Ptr([]string{ + Id: uuid.NewString(), + Permissions: []logs.PermissionsInner{ "read", "write", - }), - DisplayName: utils.Ptr("Token"), + }, + DisplayName: "Token", AccessToken: utils.Ptr("Secret access token"), - Creator: utils.Ptr(uuid.NewString()), - Expires: utils.Ptr(false), - Status: utils.Ptr(logs.ACCESSTOKENSTATUS_ACTIVE), + Creator: uuid.NewString(), + Expires: false, + Status: logs.ACCESSTOKENSTATUS_ACTIVE, }, }, }, From 9c616a040772146a507c2e6bfa7108a009ad3cb7 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:38:45 +0200 Subject: [PATCH 17/21] chore(logs): refactor access token update --- internal/cmd/logs/access_token/update/update.go | 6 +++--- internal/cmd/logs/access_token/update/update_test.go | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/internal/cmd/logs/access_token/update/update.go b/internal/cmd/logs/access_token/update/update.go index fda0cd30b..c265b639d 100644 --- a/internal/cmd/logs/access_token/update/update.go +++ b/internal/cmd/logs/access_token/update/update.go @@ -66,7 +66,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { } // Get the display name for confirmation - instanceLabel, err := logUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceId) + instanceLabel, err := logUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceId) if err != nil { params.Printer.Debug(print.ErrorLevel, "get Logs instance: %v", err) } @@ -75,7 +75,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command { } // Get the display name for confirmation - accessTokenLabel, err := logUtils.GetAccessTokenName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) + accessTokenLabel, err := logUtils.GetAccessTokenName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) if err != nil { params.Printer.Debug(print.ErrorLevel, "get access token: %v", err) } @@ -134,7 +134,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu } func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiUpdateAccessTokenRequest { - req := apiClient.UpdateAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) + req := apiClient.DefaultAPI.UpdateAccessToken(ctx, model.ProjectId, model.Region, model.InstanceId, model.AccessTokenId) payload := logs.UpdateAccessTokenPayload{ DisplayName: model.DisplayName, diff --git a/internal/cmd/logs/access_token/update/update_test.go b/internal/cmd/logs/access_token/update/update_test.go index a20c5a328..3ed128d29 100644 --- a/internal/cmd/logs/access_token/update/update_test.go +++ b/internal/cmd/logs/access_token/update/update_test.go @@ -25,7 +25,7 @@ type testCtxKey struct{} var ( testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") - testClient = &logs.APIClient{} + testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} testProjectId = uuid.NewString() testInstanceId = uuid.NewString() @@ -77,7 +77,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { } func fixtureRequest(mods ...func(request *logs.ApiUpdateAccessTokenRequest)) logs.ApiUpdateAccessTokenRequest { - request := testClient.UpdateAccessToken(testCtx, testProjectId, testRegion, testInstanceId, testAccessTokenId) + request := testClient.DefaultAPI.UpdateAccessToken(testCtx, testProjectId, testRegion, testInstanceId, testAccessTokenId) request = request.UpdateAccessTokenPayload(fixturePayload()) for _, mod := range mods { mod(&request) @@ -266,6 +266,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), cmpopts.EquateComparable(testCtx), + cmpopts.IgnoreFields(tt.expectedRequest, "ApiService"), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 2de621d4b8b29b5ae6be20c5b3c188fa54795b59 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:40:42 +0200 Subject: [PATCH 18/21] chore(logs): generate docs --- docs/stackit_logs_access-token_create.md | 2 +- docs/stackit_logs_instance_create.md | 10 +++++----- docs/stackit_logs_instance_update.md | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/stackit_logs_access-token_create.md b/docs/stackit_logs_access-token_create.md index 947260d03..87319e404 100644 --- a/docs/stackit_logs_access-token_create.md +++ b/docs/stackit_logs_access-token_create.md @@ -30,7 +30,7 @@ stackit logs access-token create [flags] --display-name string Display name for the access token -h, --help Help for "stackit logs access-token create" --instance-id string ID of the Logs instance - --lifetime int Lifetime of the access token in days [1 - 180] + --lifetime int32 Lifetime of the access token in days [1 - 180] --permissions strings Permissions of the access token ["read" "write"] ``` diff --git a/docs/stackit_logs_instance_create.md b/docs/stackit_logs_instance_create.md index e68a37824..5744d8eed 100644 --- a/docs/stackit_logs_instance_create.md +++ b/docs/stackit_logs_instance_create.md @@ -26,11 +26,11 @@ stackit logs instance create [flags] ### Options ``` - --acl strings Access control list - --description string Description - --display-name string Display name - -h, --help Help for "stackit logs instance create" - --retention-days int The days for how long the logs should be stored before being cleaned up + --acl strings Access control list + --description string Description + --display-name string Display name + -h, --help Help for "stackit logs instance create" + --retention-days int32 The days for how long the logs should be stored before being cleaned up ``` ### Options inherited from parent commands diff --git a/docs/stackit_logs_instance_update.md b/docs/stackit_logs_instance_update.md index a4fdd5a33..38723ee65 100644 --- a/docs/stackit_logs_instance_update.md +++ b/docs/stackit_logs_instance_update.md @@ -26,11 +26,11 @@ stackit logs instance update INSTANCE_ID [flags] ### Options ``` - --acl strings Access control list - --description string Description - --display-name string Display name - -h, --help Help for "stackit logs instance update" - --retention-days int The days for how long the logs should be stored before being cleaned up + --acl strings Access control list + --description string Description + --display-name string Display name + -h, --help Help for "stackit logs instance update" + --retention-days int32 The days for how long the logs should be stored before being cleaned up ``` ### Options inherited from parent commands From d69ef9391c9180e402129e9a61aaa9abc7402445 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:45:15 +0200 Subject: [PATCH 19/21] chore(logs): remove unnecessary check --- internal/cmd/logs/instance/create/create.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/internal/cmd/logs/instance/create/create.go b/internal/cmd/logs/instance/create/create.go index 0fa374a0d..2f02048a9 100644 --- a/internal/cmd/logs/instance/create/create.go +++ b/internal/cmd/logs/instance/create/create.go @@ -95,9 +95,6 @@ func NewCmd(params *types.CmdParams) *cobra.Command { if resp == nil { return fmt.Errorf("create Logs instance: empty response from API") } - if len(resp.Id) == 0 { - return fmt.Errorf("create Logs instance: instance id missing in response") - } instanceId := resp.Id // Wait for async operation, if async mode not enabled From 12550adfad3c2a8c29a5a8dc01f213b8f47976bc Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 16:55:30 +0200 Subject: [PATCH 20/21] chore(logs): fix test --- internal/cmd/logs/instance/list/list_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/cmd/logs/instance/list/list_test.go b/internal/cmd/logs/instance/list/list_test.go index 8da19f2a4..f013006be 100644 --- a/internal/cmd/logs/instance/list/list_test.go +++ b/internal/cmd/logs/instance/list/list_test.go @@ -22,7 +22,7 @@ const ( type testCtxKey struct{} var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo") -var testClient = &logs.APIClient{} +var testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}} var testProjectId = uuid.NewString() func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string { @@ -142,7 +142,7 @@ func TestBuildRequest(t *testing.T) { diff := cmp.Diff(request, tt.expectedRequest, cmp.AllowUnexported(tt.expectedRequest), - cmpopts.EquateComparable(testCtx), + cmpopts.EquateComparable(testCtx, tt.expectedRequest), ) if diff != "" { t.Fatalf("Data does not match: %s", diff) From 762862081c79f6b762809c9cf8232f71acad9673 Mon Sep 17 00:00:00 2001 From: Jan Obernberger Date: Mon, 22 Jun 2026 17:24:01 +0200 Subject: [PATCH 21/21] chore(logs): remove fragment from test --- internal/cmd/logs/instance/create/create_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/internal/cmd/logs/instance/create/create_test.go b/internal/cmd/logs/instance/create/create_test.go index 58125de3b..a0f28130b 100644 --- a/internal/cmd/logs/instance/create/create_test.go +++ b/internal/cmd/logs/instance/create/create_test.go @@ -166,13 +166,11 @@ func TestBuildRequest(t *testing.T) { description string model *inputModel expectedRequest logs.ApiCreateLogsInstanceRequest - isValid bool }{ { description: "base case", model: fixtureInputModel(), expectedRequest: fixtureRequest(), - isValid: true, }, { description: "no optional values", @@ -186,7 +184,6 @@ func TestBuildRequest(t *testing.T) { Description: nil, Acl: nil, }), - isValid: true, }, }