From 1a8bee9ac5355cc784d1e11a2e9f6dbc8453cea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Mon, 27 May 2024 16:07:57 +0100 Subject: [PATCH] Add beta to sqlserverflex command examples --- ...ckit_beta_sqlserverflex_instance_create.md | 6 +-- ...ckit_beta_sqlserverflex_instance_delete.md | 2 +- ...it_beta_sqlserverflex_instance_describe.md | 4 +- ...tackit_beta_sqlserverflex_instance_list.md | 6 +-- ...ckit_beta_sqlserverflex_instance_update.md | 4 +- .../sqlserverflex/instance/create/create.go | 12 +++-- .../sqlserverflex/instance/delete/delete.go | 2 +- .../instance/describe/describe.go | 4 +- .../beta/sqlserverflex/instance/list/list.go | 6 +-- .../sqlserverflex/instance/update/update.go | 9 ++-- internal/pkg/errors/errors.go | 16 ++++--- internal/pkg/errors/errors_test.go | 47 ++++++++++++++++--- .../pkg/services/sqlserverflex/utils/utils.go | 10 ++-- 13 files changed, 85 insertions(+), 43 deletions(-) diff --git a/docs/stackit_beta_sqlserverflex_instance_create.md b/docs/stackit_beta_sqlserverflex_instance_create.md index 58dda15a2..146ce5fd2 100644 --- a/docs/stackit_beta_sqlserverflex_instance_create.md +++ b/docs/stackit_beta_sqlserverflex_instance_create.md @@ -14,13 +14,13 @@ stackit beta sqlserverflex instance create [flags] ``` Create an SQLServer Flex instance with name "my-instance" and specify flavor by CPU and RAM. Other parameters are set to default values - $ stackit sqlserverflex instance create --name my-instance --cpu 1 --ram 4 + $ stackit beta sqlserverflex instance create --name my-instance --cpu 1 --ram 4 Create an SQLServer Flex instance with name "my-instance" and specify flavor by ID. Other parameters are set to default values - $ stackit sqlserverflex instance create --name my-instance --flavor-id xxx + $ stackit beta sqlserverflex instance create --name my-instance --flavor-id xxx Create an SQLServer Flex instance with name "my-instance", specify flavor by CPU and RAM, set storage size to 20 GB, and restrict access to a specific range of IP addresses. Other parameters are set to default values - $ stackit sqlserverflex instance create --name my-instance --cpu 1 --ram 4 --storage-size 20 --acl 1.2.3.0/24 + $ stackit beta sqlserverflex instance create --name my-instance --cpu 1 --ram 4 --storage-size 20 --acl 1.2.3.0/24 ``` ### Options diff --git a/docs/stackit_beta_sqlserverflex_instance_delete.md b/docs/stackit_beta_sqlserverflex_instance_delete.md index 920c047e9..44c90bed2 100644 --- a/docs/stackit_beta_sqlserverflex_instance_delete.md +++ b/docs/stackit_beta_sqlserverflex_instance_delete.md @@ -14,7 +14,7 @@ stackit beta sqlserverflex instance delete INSTANCE_ID [flags] ``` Delete an SQLServer Flex instance with ID "xxx" - $ stackit sqlserverflex instance delete xxx + $ stackit beta sqlserverflex instance delete xxx ``` ### Options diff --git a/docs/stackit_beta_sqlserverflex_instance_describe.md b/docs/stackit_beta_sqlserverflex_instance_describe.md index 0574fe358..5ae86dd15 100644 --- a/docs/stackit_beta_sqlserverflex_instance_describe.md +++ b/docs/stackit_beta_sqlserverflex_instance_describe.md @@ -14,10 +14,10 @@ stackit beta sqlserverflex instance describe INSTANCE_ID [flags] ``` Get details of an SQLServer Flex instance with ID "xxx" - $ stackit sqlserverflex instance describe xxx + $ stackit beta sqlserverflex instance describe xxx Get details of an SQLServer Flex instance with ID "xxx" in JSON format - $ stackit sqlserverflex instance describe xxx --output-format json + $ stackit beta sqlserverflex instance describe xxx --output-format json ``` ### Options diff --git a/docs/stackit_beta_sqlserverflex_instance_list.md b/docs/stackit_beta_sqlserverflex_instance_list.md index 3a11bc2cd..716547fed 100644 --- a/docs/stackit_beta_sqlserverflex_instance_list.md +++ b/docs/stackit_beta_sqlserverflex_instance_list.md @@ -14,13 +14,13 @@ stackit beta sqlserverflex instance list [flags] ``` List all SQLServer Flex instances - $ stackit sqlserverflex instance list + $ stackit beta sqlserverflex instance list List all SQLServer Flex instances in JSON format - $ stackit sqlserverflex instance list --output-format json + $ stackit beta sqlserverflex instance list --output-format json List up to 10 SQLServer Flex instances - $ stackit sqlserverflex instance list --limit 10 + $ stackit beta sqlserverflex instance list --limit 10 ``` ### Options diff --git a/docs/stackit_beta_sqlserverflex_instance_update.md b/docs/stackit_beta_sqlserverflex_instance_update.md index ae4dbc1f0..095c24198 100644 --- a/docs/stackit_beta_sqlserverflex_instance_update.md +++ b/docs/stackit_beta_sqlserverflex_instance_update.md @@ -14,10 +14,10 @@ stackit beta sqlserverflex instance update INSTANCE_ID [flags] ``` Update the name of an SQLServer Flex instance with ID "xxx" - $ stackit sqlserverflex instance update xxx --name my-new-name + $ stackit beta sqlserverflex instance update xxx --name my-new-name Update the backup schedule of an SQLServer Flex instance with ID "xxx" - $ stackit sqlserverflex instance update xxx --backup-schedule "30 0 * * *" + $ stackit beta sqlserverflex instance update xxx --backup-schedule "30 0 * * *" ``` ### Options diff --git a/internal/cmd/beta/sqlserverflex/instance/create/create.go b/internal/cmd/beta/sqlserverflex/instance/create/create.go index ba4ba4730..87f8c45ab 100644 --- a/internal/cmd/beta/sqlserverflex/instance/create/create.go +++ b/internal/cmd/beta/sqlserverflex/instance/create/create.go @@ -63,13 +63,13 @@ func NewCmd(p *print.Printer) *cobra.Command { Example: examples.Build( examples.NewExample( `Create an SQLServer Flex instance with name "my-instance" and specify flavor by CPU and RAM. Other parameters are set to default values`, - `$ stackit sqlserverflex instance create --name my-instance --cpu 1 --ram 4`), + `$ stackit beta sqlserverflex instance create --name my-instance --cpu 1 --ram 4`), examples.NewExample( `Create an SQLServer Flex instance with name "my-instance" and specify flavor by ID. Other parameters are set to default values`, - `$ stackit sqlserverflex instance create --name my-instance --flavor-id xxx`), + `$ stackit beta sqlserverflex instance create --name my-instance --flavor-id xxx`), examples.NewExample( `Create an SQLServer Flex instance with name "my-instance", specify flavor by CPU and RAM, set storage size to 20 GB, and restrict access to a specific range of IP addresses. Other parameters are set to default values`, - `$ stackit sqlserverflex instance create --name my-instance --cpu 1 --ram 4 --storage-size 20 --acl 1.2.3.0/24`), + `$ stackit beta sqlserverflex instance create --name my-instance --cpu 1 --ram 4 --storage-size 20 --acl 1.2.3.0/24`), ), RunE: func(cmd *cobra.Command, args []string) error { ctx := context.Background() @@ -157,12 +157,14 @@ func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) { if flavorId == nil && (cpu == nil || ram == nil) { return nil, &cliErr.DatabaseInputFlavorError{ - Cmd: cmd, + Cmd: cmd, + Service: sqlserverflexUtils.ServiceCmd, } } if flavorId != nil && (cpu != nil || ram != nil) { return nil, &cliErr.DatabaseInputFlavorError{ - Cmd: cmd, + Cmd: cmd, + Service: sqlserverflexUtils.ServiceCmd, } } diff --git a/internal/cmd/beta/sqlserverflex/instance/delete/delete.go b/internal/cmd/beta/sqlserverflex/instance/delete/delete.go index 177ef02b7..c6eb670bf 100644 --- a/internal/cmd/beta/sqlserverflex/instance/delete/delete.go +++ b/internal/cmd/beta/sqlserverflex/instance/delete/delete.go @@ -37,7 +37,7 @@ func NewCmd(p *print.Printer) *cobra.Command { Example: examples.Build( examples.NewExample( `Delete an SQLServer Flex instance with ID "xxx"`, - "$ stackit sqlserverflex instance delete xxx"), + "$ stackit beta sqlserverflex instance delete xxx"), ), RunE: func(cmd *cobra.Command, args []string) error { ctx := context.Background() diff --git a/internal/cmd/beta/sqlserverflex/instance/describe/describe.go b/internal/cmd/beta/sqlserverflex/instance/describe/describe.go index 51306865b..1cbbce323 100644 --- a/internal/cmd/beta/sqlserverflex/instance/describe/describe.go +++ b/internal/cmd/beta/sqlserverflex/instance/describe/describe.go @@ -38,10 +38,10 @@ func NewCmd(p *print.Printer) *cobra.Command { Example: examples.Build( examples.NewExample( `Get details of an SQLServer Flex instance with ID "xxx"`, - "$ stackit sqlserverflex instance describe xxx"), + "$ stackit beta sqlserverflex instance describe xxx"), examples.NewExample( `Get details of an SQLServer Flex instance with ID "xxx" in JSON format`, - "$ stackit sqlserverflex instance describe xxx --output-format json"), + "$ stackit beta sqlserverflex instance describe xxx --output-format json"), ), RunE: func(cmd *cobra.Command, args []string) error { ctx := context.Background() diff --git a/internal/cmd/beta/sqlserverflex/instance/list/list.go b/internal/cmd/beta/sqlserverflex/instance/list/list.go index 0d8b42c03..7d89dd1d6 100644 --- a/internal/cmd/beta/sqlserverflex/instance/list/list.go +++ b/internal/cmd/beta/sqlserverflex/instance/list/list.go @@ -38,13 +38,13 @@ func NewCmd(p *print.Printer) *cobra.Command { Example: examples.Build( examples.NewExample( `List all SQLServer Flex instances`, - "$ stackit sqlserverflex instance list"), + "$ stackit beta sqlserverflex instance list"), examples.NewExample( `List all SQLServer Flex instances in JSON format`, - "$ stackit sqlserverflex instance list --output-format json"), + "$ stackit beta sqlserverflex instance list --output-format json"), examples.NewExample( `List up to 10 SQLServer Flex instances`, - "$ stackit sqlserverflex instance list --limit 10"), + "$ stackit beta sqlserverflex instance list --limit 10"), ), RunE: func(cmd *cobra.Command, args []string) error { ctx := context.Background() diff --git a/internal/cmd/beta/sqlserverflex/instance/update/update.go b/internal/cmd/beta/sqlserverflex/instance/update/update.go index 587aa4d22..4eefb3980 100644 --- a/internal/cmd/beta/sqlserverflex/instance/update/update.go +++ b/internal/cmd/beta/sqlserverflex/instance/update/update.go @@ -56,10 +56,10 @@ func NewCmd(p *print.Printer) *cobra.Command { Example: examples.Build( examples.NewExample( `Update the name of an SQLServer Flex instance with ID "xxx"`, - "$ stackit sqlserverflex instance update xxx --name my-new-name"), + "$ stackit beta sqlserverflex instance update xxx --name my-new-name"), examples.NewExample( `Update the backup schedule of an SQLServer Flex instance with ID "xxx"`, - `$ stackit sqlserverflex instance update xxx --backup-schedule "30 0 * * *"`), + `$ stackit beta sqlserverflex instance update xxx --backup-schedule "30 0 * * *"`), ), Args: args.SingleArg(instanceIdArg, utils.ValidateUUID), RunE: func(cmd *cobra.Command, args []string) error { @@ -152,8 +152,9 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu if flavorId != nil && (cpu != nil || ram != nil) { return nil, &cliErr.DatabaseInputFlavorError{ - Cmd: cmd, - Args: inputArgs, + Cmd: cmd, + Service: sqlserverflexUtils.ServiceCmd, + Args: inputArgs, } } diff --git a/internal/pkg/errors/errors.go b/internal/pkg/errors/errors.go index 6b127bf67..0d7528461 100644 --- a/internal/pkg/errors/errors.go +++ b/internal/pkg/errors/errors.go @@ -194,10 +194,9 @@ func (e *DSAInvalidPlanError) Error() string { } type DatabaseInputFlavorError struct { - Service string - Operation string - Cmd *cobra.Command - Args []string + Service string + Cmd *cobra.Command + Args []string } func (e *DatabaseInputFlavorError) Error() string { @@ -205,10 +204,13 @@ func (e *DatabaseInputFlavorError) Error() string { if len(e.Args) > 0 { fullCommandPath = fmt.Sprintf("%s %s", fullCommandPath, strings.Join(e.Args, " ")) } - // Assumes a structure of the form "stackit " - service := e.Cmd.Parent().Parent().Use - return fmt.Sprintf(DATABASE_INVALID_INPUT_FLAVOR, fullCommandPath, service) + if e.Service == "" { + // Assumes a structure of the form "stackit " + e.Service = e.Cmd.Parent().Parent().Use + } + + return fmt.Sprintf(DATABASE_INVALID_INPUT_FLAVOR, fullCommandPath, e.Service) } type DatabaseInvalidFlavorError struct { diff --git a/internal/pkg/errors/errors_test.go b/internal/pkg/errors/errors_test.go index 8e7999d23..fd050f2f7 100644 --- a/internal/pkg/errors/errors_test.go +++ b/internal/pkg/errors/errors_test.go @@ -31,6 +31,28 @@ func setupCmd() { resource.AddCommand(operation) } +func setupBetaCmd() { + cmd = &cobra.Command{ + Use: "stackit", + } + beta := &cobra.Command{ + Use: "beta", + } + service = &cobra.Command{ + Use: "service", + } + resource = &cobra.Command{ + Use: "resource", + } + operation = &cobra.Command{ + Use: "operation", + } + cmd.AddCommand(beta) + beta.AddCommand(service) + service.AddCommand(resource) + resource.AddCommand(operation) +} + func TestSimpleErrors(t *testing.T) { tests := []struct { description string @@ -220,24 +242,35 @@ func TestDatabaseInputFlavorError(t *testing.T) { tests := []struct { description string args []string - operation string + service string expectedMsg string + isBetaCmd bool }{ { - description: "base", + description: "no service", args: []string{"arg1", "arg2"}, - operation: "operation", expectedMsg: fmt.Sprintf(DATABASE_INVALID_INPUT_FLAVOR, "stackit service resource operation arg1 arg2", "service"), }, + { + description: "with service", + args: []string{"arg1", "arg2"}, + service: "beta service", + expectedMsg: fmt.Sprintf(DATABASE_INVALID_INPUT_FLAVOR, "stackit beta service resource operation arg1 arg2", "beta service"), + isBetaCmd: true, + }, } - setupCmd() for _, tt := range tests { + if tt.isBetaCmd { + setupBetaCmd() + } else { + setupCmd() + } t.Run(tt.description, func(t *testing.T) { err := &DatabaseInputFlavorError{ - Cmd: operation, - Args: tt.args, - Operation: tt.operation, + Cmd: operation, + Args: tt.args, + Service: tt.service, } if err.Error() != tt.expectedMsg { diff --git a/internal/pkg/services/sqlserverflex/utils/utils.go b/internal/pkg/services/sqlserverflex/utils/utils.go index f4e9995f3..2e74c879e 100644 --- a/internal/pkg/services/sqlserverflex/utils/utils.go +++ b/internal/pkg/services/sqlserverflex/utils/utils.go @@ -10,6 +10,10 @@ import ( "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex" ) +const ( + ServiceCmd = "beta sqlserverflex" +) + type SQLServerFlexClient interface { ListVersionsExecute(ctx context.Context, projectId string) (*sqlserverflex.ListVersionsResponse, error) GetInstanceExecute(ctx context.Context, projectId, instanceId string) (*sqlserverflex.GetInstanceResponse, error) @@ -27,7 +31,7 @@ func ValidateFlavorId(flavorId string, flavors *[]sqlserverflex.InstanceFlavorEn } return &errors.DatabaseInvalidFlavorError{ - Service: "sqlserverflex", + Service: ServiceCmd, Details: fmt.Sprintf("You provided flavor ID '%s', which is invalid.", flavorId), } } @@ -53,7 +57,7 @@ func ValidateStorage(storageClass *string, storageSize *int64, storages *sqlserv } } return &errors.DatabaseInvalidStorageError{ - Service: "sqlserverflex", + Service: ServiceCmd, Details: fmt.Sprintf("You provided storage class '%s', which is invalid.", *storageClass), FlavorId: flavorId, } @@ -75,7 +79,7 @@ func LoadFlavorId(cpu, ram int64, flavors *[]sqlserverflex.InstanceFlavorEntry) availableFlavors = fmt.Sprintf("%s\n- %d CPU, %d GB RAM", availableFlavors, *f.Cpu, *f.Cpu) } return nil, &errors.DatabaseInvalidFlavorError{ - Service: "sqlserverflex", + Service: ServiceCmd, Details: "You provided an invalid combination for CPU and RAM.", } }