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
55 changes: 55 additions & 0 deletions internal/namespaces/rdb/v1/custom_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package rdb
import (
"context"
"reflect"
"strings"
"time"

"github.com/scaleway/scaleway-cli/internal/core"
Expand Down Expand Up @@ -76,6 +77,60 @@ func backupScheduleMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string,
return str, nil
}

func instanceCloneBuilder(c *core.Command) *core.Command {
c.WaitFunc = func(ctx context.Context, argsI, respI interface{}) (interface{}, error) {
api := rdb.NewAPI(core.ExtractClient(ctx))
return api.WaitForInstance(&rdb.WaitForInstanceRequest{
InstanceID: respI.(*rdb.Instance).ID,
Region: respI.(*rdb.Instance).Region,
Timeout: scw.TimeDurationPtr(instanceActionTimeout),
RetryInterval: core.DefaultRetryInterval,
})
}

return c
}

func instanceCreateBuilder(c *core.Command) *core.Command {
c.ArgSpecs.GetByName("node-type").Default = core.DefaultValueSetter("DB-DEV-S")
c.ArgSpecs.GetByName("node-type").EnumValues = nodeTypes

c.WaitFunc = func(ctx context.Context, argsI, respI interface{}) (interface{}, error) {
api := rdb.NewAPI(core.ExtractClient(ctx))
return api.WaitForInstance(&rdb.WaitForInstanceRequest{
InstanceID: respI.(*rdb.Instance).ID,
Region: respI.(*rdb.Instance).Region,
Timeout: scw.TimeDurationPtr(instanceActionTimeout),
RetryInterval: core.DefaultRetryInterval,
})
}

// Waiting for API to accept uppercase node-type
c.Interceptor = func(ctx context.Context, argsI interface{}, runner core.CommandRunner) (interface{}, error) {
args := argsI.(*rdb.CreateInstanceRequest)
args.NodeType = strings.ToLower(args.NodeType)
return runner(ctx, args)
}

return c
}

func instanceUpgradeBuilder(c *core.Command) *core.Command {
c.ArgSpecs.GetByName("node-type").EnumValues = nodeTypes

c.WaitFunc = func(ctx context.Context, argsI, respI interface{}) (interface{}, error) {
api := rdb.NewAPI(core.ExtractClient(ctx))
return api.WaitForInstance(&rdb.WaitForInstanceRequest{
InstanceID: respI.(*rdb.Instance).ID,
Region: respI.(*rdb.Instance).Region,
Timeout: scw.TimeDurationPtr(instanceActionTimeout),
RetryInterval: core.DefaultRetryInterval,
})
}

return c
}

func instanceWaitCommand() *core.Command {
return &core.Command{
Short: `Wait for an instance to reach a stable state`,
Expand Down
23 changes: 0 additions & 23 deletions internal/namespaces/rdb/v1/custom_instance_clone.go

This file was deleted.

21 changes: 0 additions & 21 deletions internal/namespaces/rdb/v1/custom_instance_clone_test.go

This file was deleted.

34 changes: 0 additions & 34 deletions internal/namespaces/rdb/v1/custom_instance_create.go

This file was deleted.

17 changes: 0 additions & 17 deletions internal/namespaces/rdb/v1/custom_instance_create_test.go

This file was deleted.

21 changes: 0 additions & 21 deletions internal/namespaces/rdb/v1/custom_instance_get_test.go

This file was deleted.

47 changes: 47 additions & 0 deletions internal/namespaces/rdb/v1/custom_instance_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package rdb

import (
"fmt"
"testing"

"github.com/scaleway/scaleway-cli/internal/core"
)

func Test_CloneInstance(t *testing.T) {
t.Run("Simple", core.Test(&core.TestConfig{
Commands: GetCommands(),
BeforeFunc: createInstance(),
Cmd: "scw rdb instance clone {{ .Instance.ID }} node-type=DB-DEV-M name=foobar --wait",
Check: core.TestCheckGolden(),
AfterFunc: deleteInstance(),
}))
}

func Test_CreateInstance(t *testing.T) {
t.Run("Simple", core.Test(&core.TestConfig{
Commands: GetCommands(),
Cmd: fmt.Sprintf("scw rdb instance create node-type=DB-DEV-S is-ha-cluster=false name=%s engine=%s user-name=%s password=%s --wait", name, engine, user, password),
Check: core.TestCheckGolden(),
AfterFunc: core.ExecAfterCmd("scw rdb instance delete {{ .CmdResult.ID }}"),
}))
}

func Test_GetInstance(t *testing.T) {
t.Run("Simple", core.Test(&core.TestConfig{
Commands: GetCommands(),
BeforeFunc: createInstance(),
Cmd: "scw rdb instance get {{ .Instance.ID }}",
Check: core.TestCheckGolden(),
AfterFunc: deleteInstance(),
}))
}

func Test_UpgradeInstance(t *testing.T) {
t.Run("Simple", core.Test(&core.TestConfig{
Commands: GetCommands(),
BeforeFunc: createInstance(),
Cmd: "scw rdb instance upgrade {{ .Instance.ID }} node-type=DB-DEV-M --wait",
Check: core.TestCheckGolden(),
AfterFunc: deleteInstance(),
}))
}
25 changes: 0 additions & 25 deletions internal/namespaces/rdb/v1/custom_instance_upgrade.go

This file was deleted.

28 changes: 0 additions & 28 deletions internal/namespaces/rdb/v1/custom_instance_upgrade_test.go

This file was deleted.

25 changes: 25 additions & 0 deletions internal/namespaces/rdb/v1/helper_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package rdb

import (
"fmt"

"github.com/scaleway/scaleway-cli/internal/core"
)

const (
name = "cli-test"
user = "foobar"
password = "{4xdl*#QOoP+&3XRkGA)]"
engine = "PostgreSQL-12"
)

func createInstance() core.BeforeFunc {
return core.ExecStoreBeforeCmd(
"Instance",
fmt.Sprintf("scw rdb instance create node-type=DB-DEV-S is-ha-cluster=false name=%s engine=%s user-name=%s password=%s --wait", name, engine, user, password),
)
}

func deleteInstance() core.AfterFunc {
return core.ExecAfterCmd("scw rdb instance delete {{ .Instance.ID }}")
}