Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions internal/cmd/beta/server/backup/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
iaasClient "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
iaasUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/serverbackup/client"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"

Expand Down Expand Up @@ -65,6 +67,17 @@ func NewCmd(p *print.Printer) *cobra.Command {
return err
}

serverLabel := model.ServerId
// Get server name
if iaasApiClient, err := iaasClient.ConfigureClient(p); err == nil {
serverName, err := iaasUtils.GetServerName(ctx, iaasApiClient, model.ProjectId, model.ServerId)
if err != nil {
p.Debug(print.ErrorLevel, "get server name: %v", err)
} else if serverName != "" {
serverLabel = serverName
}
}

if !model.AssumeYes {
prompt := fmt.Sprintf("Are you sure you want to create a Backup for server %s?", model.ServerId)
err = p.PromptForConfirmation(prompt)
Expand All @@ -83,7 +96,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
return fmt.Errorf("create Server Backup: %w", err)
}

return outputResult(p, model, resp)
return outputResult(p, model.OutputFormat, serverLabel, *resp)
},
}
configureFlags(cmd)
Expand Down Expand Up @@ -140,8 +153,8 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serverbacku
return req, nil
}

func outputResult(p *print.Printer, model *inputModel, resp *serverbackup.BackupJob) error {
switch model.OutputFormat {
func outputResult(p *print.Printer, outputFormat, serverLabel string, resp serverbackup.BackupJob) error {
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(resp, "", " ")
if err != nil {
Expand All @@ -159,7 +172,7 @@ func outputResult(p *print.Printer, model *inputModel, resp *serverbackup.Backup

return nil
default:
p.Outputf("Triggered creation of server backup for server %s. Backup ID: %s\n", model.ServerId, utils.PtrString(resp.Id))
p.Outputf("Triggered creation of server backup for server %s. Backup ID: %s\n", serverLabel, utils.PtrString(resp.Id))
return nil
}
}
28 changes: 28 additions & 0 deletions internal/cmd/beta/server/backup/create/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,3 +208,31 @@ func TestBuildRequest(t *testing.T) {
})
}
}

func TestOutputResult(t *testing.T) {
type args struct {
outputFormat string
serverLabel string
resp serverbackup.BackupJob
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "empty",
args: args{},
wantErr: false,
},
}
p := print.NewPrinter()
p.Cmd = NewCmd(p)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := outputResult(p, tt.args.outputFormat, tt.args.serverLabel, tt.args.resp); (err != nil) != tt.wantErr {
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
11 changes: 8 additions & 3 deletions internal/cmd/beta/server/backup/describe/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"strconv"

"github.com/goccy/go-yaml"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
Expand Down Expand Up @@ -64,7 +65,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
return fmt.Errorf("read server backup: %w", err)
}

return outputResult(p, model.OutputFormat, resp)
return outputResult(p, model.OutputFormat, *resp)
},
}
configureFlags(cmd)
Expand Down Expand Up @@ -109,7 +110,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serverbacku
return req
}

func outputResult(p *print.Printer, outputFormat string, backup *serverbackup.Backup) error {
func outputResult(p *print.Printer, outputFormat string, backup serverbackup.Backup) error {
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(backup, "", " ")
Expand Down Expand Up @@ -145,7 +146,11 @@ func outputResult(p *print.Printer, outputFormat string, backup *serverbackup.Ba
lastRestored := utils.PtrStringDefault(backup.LastRestoredAt, "")
table.AddRow("LAST RESTORED AT", lastRestored)
table.AddSeparator()
table.AddRow("VOLUME BACKUPS", len(*backup.VolumeBackups))
volBackups := ""
if backups := backup.VolumeBackups; backups != nil {
volBackups = strconv.Itoa(len(*backups))
}
table.AddRow("VOLUME BACKUPS", volBackups)
table.AddSeparator()

err := table.Display(p)
Expand Down
35 changes: 35 additions & 0 deletions internal/cmd/beta/server/backup/describe/describe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,38 @@ func TestBuildRequest(t *testing.T) {
})
}
}

func TestOutputResult(t *testing.T) {
type args struct {
outputFormat string
backup serverbackup.Backup
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "empty",
args: args{},
wantErr: false,
},
{
name: "output format json",
args: args{
outputFormat: print.JSONOutputFormat,
backup: serverbackup.Backup{},
},
wantErr: false,
},
}
p := print.NewPrinter()
p.Cmd = NewCmd(p)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := outputResult(p, tt.args.outputFormat, tt.args.backup); (err != nil) != tt.wantErr {
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
19 changes: 16 additions & 3 deletions internal/cmd/beta/server/backup/disable/disable.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
iaasClient "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
iaasUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/serverbackup/client"
serverbackupUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/serverbackup/utils"

Expand Down Expand Up @@ -50,17 +52,28 @@ func NewCmd(p *print.Printer) *cobra.Command {
return err
}

serverLabel := model.ServerId
// Get server name
if iaasApiClient, err := iaasClient.ConfigureClient(p); err == nil {
serverName, err := iaasUtils.GetServerName(ctx, iaasApiClient, model.ProjectId, model.ServerId)
if err != nil {
p.Debug(print.ErrorLevel, "get server name: %v", err)
} else if serverName != "" {
serverLabel = serverName
}
}

canDisable, err := serverbackupUtils.CanDisableBackupService(ctx, apiClient, model.ProjectId, model.ServerId)
if err != nil {
return err
}
if !canDisable {
p.Info("Cannot disable backup service for server %s - existing backups or existing backup schedules found\n", model.ServerId)
p.Info("Cannot disable backup service for server %s - existing backups or existing backup schedules found\n", serverLabel)
return nil
}

if !model.AssumeYes {
prompt := fmt.Sprintf("Are you sure you want to disable the backup service for server %s?", model.ServerId)
prompt := fmt.Sprintf("Are you sure you want to disable the backup service for server %s?", serverLabel)
err = p.PromptForConfirmation(prompt)
if err != nil {
return err
Expand All @@ -74,7 +87,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
return fmt.Errorf("disable server backup service: %w", err)
}

p.Info("Disabled Server Backup service for server %s\n", model.ServerId)
p.Info("Disabled Server Backup service for server %s\n", serverLabel)
return nil
},
}
Expand Down
17 changes: 15 additions & 2 deletions internal/cmd/beta/server/backup/enable/enable.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
iaasClient "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
iaasUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/serverbackup/client"

"github.com/spf13/cobra"
Expand Down Expand Up @@ -50,8 +52,19 @@ func NewCmd(p *print.Printer) *cobra.Command {
return err
}

serverLabel := model.ServerId
// Get server name
if iaasApiClient, err := iaasClient.ConfigureClient(p); err == nil {
serverName, err := iaasUtils.GetServerName(ctx, iaasApiClient, model.ProjectId, model.ServerId)
if err != nil {
p.Debug(print.ErrorLevel, "get server name: %v", err)
} else if serverName != "" {
serverLabel = serverName
}
}

if !model.AssumeYes {
prompt := fmt.Sprintf("Are you sure you want to enable the Server Backup service for server %s?", model.ServerId)
prompt := fmt.Sprintf("Are you sure you want to enable the Server Backup service for server %s?", serverLabel)
err = p.PromptForConfirmation(prompt)
if err != nil {
return err
Expand All @@ -67,7 +80,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
}
}

p.Info("Enabled backup service for server %s\n", model.ServerId)
p.Info("Enabled backup service for server %s\n", serverLabel)
return nil
},
}
Expand Down
20 changes: 18 additions & 2 deletions internal/cmd/beta/server/backup/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
iaasClient "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
iaasUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/serverbackup/client"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
Expand Down Expand Up @@ -65,7 +67,17 @@ func NewCmd(p *print.Printer) *cobra.Command {
}
backups := *resp.Items
if len(backups) == 0 {
p.Info("No backups found for server %s\n", model.ServerId)
serverLabel := model.ServerId
// Get server name
if iaasApiClient, err := iaasClient.ConfigureClient(p); err == nil {
serverName, err := iaasUtils.GetServerName(ctx, iaasApiClient, model.ProjectId, model.ServerId)
if err != nil {
p.Debug(print.ErrorLevel, "get server name: %v", err)
} else if serverName != "" {
serverLabel = serverName
}
}
p.Info("No backups found for server %s\n", serverLabel)
return nil
}

Expand Down Expand Up @@ -150,6 +162,10 @@ func outputResult(p *print.Printer, outputFormat string, backups []serverbackup.
s := backups[i]

lastRestored := utils.PtrStringDefault(s.LastRestoredAt, "")
var volBackups int
if s.VolumeBackups != nil {
volBackups = len(*s.VolumeBackups)
}
table.AddRow(
utils.PtrString(s.Id),
utils.PtrString(s.Name),
Expand All @@ -158,7 +174,7 @@ func outputResult(p *print.Printer, outputFormat string, backups []serverbackup.
utils.PtrString(s.CreatedAt),
utils.PtrString(s.ExpireAt),
lastRestored,
len(*s.VolumeBackups),
volBackups,
)
}
err := table.Display(p)
Expand Down
36 changes: 36 additions & 0 deletions internal/cmd/beta/server/backup/list/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,3 +186,39 @@ func TestBuildRequest(t *testing.T) {
})
}
}

func TestOutputResult(t *testing.T) {
type args struct {
outputFormat string
backups []serverbackup.Backup
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "empty",
args: args{},
wantErr: false,
},
{
name: "empty backup",
args: args{
backups: []serverbackup.Backup{
{},
},
},
wantErr: false,
},
}
p := print.NewPrinter()
p.Cmd = NewCmd(p)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := outputResult(p, tt.args.outputFormat, tt.args.backups); (err != nil) != tt.wantErr {
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
Loading