Skip to content

Commit bfe29ff

Browse files
author
João Palet
committed
Implement database delete command
1 parent 0e22b83 commit bfe29ff

9 files changed

Lines changed: 497 additions & 8 deletions

docs/stackit_beta_sqlserverflex.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ stackit beta sqlserverflex [flags]
2929
### SEE ALSO
3030

3131
* [stackit beta](./stackit_beta.md) - Contains beta STACKIT CLI commands
32+
* [stackit beta sqlserverflex database](./stackit_beta_sqlserverflex_database.md) - Provides functionality for SQLServer Flex databases
3233
* [stackit beta sqlserverflex instance](./stackit_beta_sqlserverflex_instance.md) - Provides functionality for SQLServer Flex instances
3334
* [stackit beta sqlserverflex options](./stackit_beta_sqlserverflex_options.md) - Lists SQL Server Flex options
3435
* [stackit beta sqlserverflex user](./stackit_beta_sqlserverflex_user.md) - Provides functionality for SQLServer Flex users
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## stackit beta sqlserverflex database
2+
3+
Provides functionality for SQLServer Flex databases
4+
5+
### Synopsis
6+
7+
Provides functionality for SQLServer Flex databases.
8+
9+
```
10+
stackit beta sqlserverflex database [flags]
11+
```
12+
13+
### Options
14+
15+
```
16+
-h, --help Help for "stackit beta sqlserverflex database"
17+
```
18+
19+
### Options inherited from parent commands
20+
21+
```
22+
-y, --assume-yes If set, skips all confirmation prompts
23+
--async If set, runs the command asynchronously
24+
-o, --output-format string Output format, one of ["json" "pretty" "none" "yaml"]
25+
-p, --project-id string Project ID
26+
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
27+
```
28+
29+
### SEE ALSO
30+
31+
* [stackit beta sqlserverflex](./stackit_beta_sqlserverflex.md) - Provides functionality for SQLServer Flex
32+
* [stackit beta sqlserverflex database create](./stackit_beta_sqlserverflex_database_create.md) - Creates an SQLServer Flex database
33+
* [stackit beta sqlserverflex database delete](./stackit_beta_sqlserverflex_database_delete.md) - Deletes an SQLServer Flex database
34+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
## stackit beta sqlserverflex database create
2+
3+
Creates an SQLServer Flex database
4+
5+
### Synopsis
6+
7+
Creates an SQLServer Flex database.
8+
This operation cannot be triggered asynchronously (the "--async" flag will have no effect).
9+
10+
```
11+
stackit beta sqlserverflex database create DATABASE_NAME [flags]
12+
```
13+
14+
### Examples
15+
16+
```
17+
Create an SQLServer Flex database with name "my-database" on instance with ID "xxx"
18+
$ stackit beta sqlserverflex database create my-database --instance-id xxx --owner some-username
19+
```
20+
21+
### Options
22+
23+
```
24+
-h, --help Help for "stackit beta sqlserverflex database create"
25+
--instance-id string SQLServer Flex instance ID
26+
--owner string Username of the owner user
27+
```
28+
29+
### Options inherited from parent commands
30+
31+
```
32+
-y, --assume-yes If set, skips all confirmation prompts
33+
--async If set, runs the command asynchronously
34+
-o, --output-format string Output format, one of ["json" "pretty" "none" "yaml"]
35+
-p, --project-id string Project ID
36+
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
37+
```
38+
39+
### SEE ALSO
40+
41+
* [stackit beta sqlserverflex database](./stackit_beta_sqlserverflex_database.md) - Provides functionality for SQLServer Flex databases
42+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
## stackit beta sqlserverflex database delete
2+
3+
Deletes an SQLServer Flex database
4+
5+
### Synopsis
6+
7+
Deletes an SQLServer Flex database.
8+
This operation cannot be triggered asynchronously (the "--async" flag will have no effect).
9+
10+
```
11+
stackit beta sqlserverflex database delete DATABASE_NAME [flags]
12+
```
13+
14+
### Examples
15+
16+
```
17+
Delete an SQLServer Flex database with name "my-database" of instance with ID "xxx"
18+
$ stackit beta sqlserverflex database delete my-database --instance-id xxx
19+
```
20+
21+
### Options
22+
23+
```
24+
-h, --help Help for "stackit beta sqlserverflex database delete"
25+
--instance-id string SQLServer Flex instance ID
26+
```
27+
28+
### Options inherited from parent commands
29+
30+
```
31+
-y, --assume-yes If set, skips all confirmation prompts
32+
--async If set, runs the command asynchronously
33+
-o, --output-format string Output format, one of ["json" "pretty" "none" "yaml"]
34+
-p, --project-id string Project ID
35+
--verbosity string Verbosity of the CLI, one of ["debug" "info" "warning" "error"] (default "info")
36+
```
37+
38+
### SEE ALSO
39+
40+
* [stackit beta sqlserverflex database](./stackit_beta_sqlserverflex_database.md) - Provides functionality for SQLServer Flex databases
41+

internal/cmd/beta/sqlserverflex/database/create/create.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,7 @@ func outputResult(p *print.Printer, model *inputModel, resp *sqlserverflex.Creat
152152

153153
return nil
154154
default:
155-
operationState := "Created"
156-
if model.Async {
157-
operationState = "Triggered creation of"
158-
}
159-
p.Outputf("%s database %q\n", operationState, model.DatabaseName)
155+
p.Outputf("Created database %q\n", model.DatabaseName)
160156
return nil
161157
}
162158
}

internal/cmd/beta/sqlserverflex/database/create/create_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,22 @@ func TestParseInput(t *testing.T) {
143143
}),
144144
isValid: false,
145145
},
146+
{
147+
description: "instance id invalid 1",
148+
argValues: fixtureArgValues(),
149+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
150+
flagValues[instanceIdFlag] = ""
151+
}),
152+
isValid: false,
153+
},
154+
{
155+
description: "instance id invalid 2",
156+
argValues: fixtureArgValues(),
157+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
158+
flagValues[instanceIdFlag] = "invalid-uuid"
159+
}),
160+
isValid: false,
161+
},
146162
{
147163
description: "owner missing",
148164
argValues: fixtureArgValues(),

internal/cmd/beta/sqlserverflex/database/database.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package database
22

33
import (
44
"github.com/stackitcloud/stackit-cli/internal/cmd/beta/sqlserverflex/database/create"
5+
"github.com/stackitcloud/stackit-cli/internal/cmd/beta/sqlserverflex/database/delete"
56
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
67
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
78
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
@@ -22,8 +23,6 @@ func NewCmd(p *print.Printer) *cobra.Command {
2223
}
2324

2425
func addSubcommands(cmd *cobra.Command, p *print.Printer) {
25-
// cmd.AddCommand(delete.NewCmd(p))
26-
// cmd.AddCommand(describe.NewCmd(p))
2726
cmd.AddCommand(create.NewCmd(p))
28-
// cmd.AddCommand(list.NewCmd(p))
27+
cmd.AddCommand(delete.NewCmd(p))
2928
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package delete
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
8+
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
9+
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
10+
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
11+
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
12+
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
13+
"github.com/stackitcloud/stackit-cli/internal/pkg/services/sqlserverflex/client"
14+
"github.com/stackitcloud/stackit-cli/internal/pkg/spinner"
15+
16+
"github.com/spf13/cobra"
17+
"github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex"
18+
)
19+
20+
const (
21+
databaseNameArg = "DATABASE_NAME"
22+
23+
instanceIdFlag = "instance-id"
24+
)
25+
26+
type inputModel struct {
27+
*globalflags.GlobalFlagModel
28+
DatabaseName string
29+
InstanceId string
30+
}
31+
32+
func NewCmd(p *print.Printer) *cobra.Command {
33+
cmd := &cobra.Command{
34+
Use: fmt.Sprintf("delete %s", databaseNameArg),
35+
Short: "Deletes an SQLServer Flex database",
36+
Long: fmt.Sprintf("%s\n%s",
37+
"Deletes an SQLServer Flex database.",
38+
`This operation cannot be triggered asynchronously (the "--async" flag will have no effect).`,
39+
),
40+
Args: args.SingleArg(databaseNameArg, nil),
41+
Example: examples.Build(
42+
examples.NewExample(
43+
`Delete an SQLServer Flex database with name "my-database" of instance with ID "xxx"`,
44+
"$ stackit beta sqlserverflex database delete my-database --instance-id xxx"),
45+
),
46+
RunE: func(cmd *cobra.Command, args []string) error {
47+
ctx := context.Background()
48+
model, err := parseInput(p, cmd, args)
49+
if err != nil {
50+
return err
51+
}
52+
53+
// Configure API client
54+
apiClient, err := client.ConfigureClient(p)
55+
if err != nil {
56+
return err
57+
}
58+
59+
if !model.AssumeYes {
60+
prompt := fmt.Sprintf("Are you sure you want to delete database %q? (This cannot be undone)", model.DatabaseName)
61+
err = p.PromptForConfirmation(prompt)
62+
if err != nil {
63+
return err
64+
}
65+
}
66+
67+
// Call API
68+
req := buildRequest(ctx, model, apiClient)
69+
s := spinner.New(p)
70+
s.Start("Deleting database")
71+
err = req.Execute()
72+
if err != nil {
73+
s.StopWithError()
74+
return fmt.Errorf("delete SQLServer Flex database: %w", err)
75+
}
76+
s.Stop()
77+
78+
p.Info("Deleted database %q\n", model.DatabaseName)
79+
return nil
80+
},
81+
}
82+
configureFlags(cmd)
83+
return cmd
84+
}
85+
86+
func configureFlags(cmd *cobra.Command) {
87+
cmd.Flags().Var(flags.UUIDFlag(), instanceIdFlag, "SQLServer Flex instance ID")
88+
err := flags.MarkFlagsRequired(cmd, instanceIdFlag)
89+
cobra.CheckErr(err)
90+
}
91+
92+
func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) {
93+
databaseName := inputArgs[0]
94+
95+
globalFlags := globalflags.Parse(p, cmd)
96+
if globalFlags.ProjectId == "" {
97+
return nil, &errors.ProjectIdError{}
98+
}
99+
100+
model := inputModel{
101+
GlobalFlagModel: globalFlags,
102+
DatabaseName: databaseName,
103+
InstanceId: flags.FlagToStringValue(p, cmd, instanceIdFlag),
104+
}
105+
106+
if p.IsVerbosityDebug() {
107+
modelStr, err := print.BuildDebugStrFromInputModel(model)
108+
if err != nil {
109+
p.Debug(print.ErrorLevel, "convert model to string for debugging: %v", err)
110+
} else {
111+
p.Debug(print.DebugLevel, "parsed input values: %s", modelStr)
112+
}
113+
}
114+
115+
return &model, nil
116+
}
117+
118+
func buildRequest(ctx context.Context, model *inputModel, apiClient *sqlserverflex.APIClient) sqlserverflex.ApiDeleteDatabaseRequest {
119+
req := apiClient.DeleteDatabase(ctx, model.ProjectId, model.InstanceId, model.DatabaseName)
120+
return req
121+
}

0 commit comments

Comments
 (0)