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
49 changes: 44 additions & 5 deletions internal/namespaces/instance/v1/custom_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@ func orderVolumes(v map[string]*customVolume) []*customVolume {
return orderedVolumes
}

type ServerWithWarningsResponse struct {
*instance.Server
Warnings []string
}

// serversMarshalerFunc marshals a BootscriptID.
func bootscriptMarshalerFunc(i interface{}, _ *human.MarshalOpt) (string, error) {
bootscript := i.(instance.Bootscript)
Expand Down Expand Up @@ -349,7 +354,27 @@ func serverUpdateBuilder(c *core.Command) *core.Command {
return nil, err
}

return updateServerResponse, nil
// Display warning if server-type is deprecated
warnings := []string(nil)
server := updateServerResponse.Server
if server.EndOfService {
warnings = warningServerTypeDeprecated(ctx, client, server)
}

return &ServerWithWarningsResponse{
server,
warnings,
}, nil
}

c.View = &core.View{
Sections: []*core.ViewSection{
{
FieldName: "Warnings",
Title: "Warnings",
HideIfEmpty: true,
},
},
}

return c
Expand Down Expand Up @@ -392,6 +417,7 @@ func serverGetBuilder(c *core.Command) *core.Command {
return rawResp, err
}
getServerResp := rawResp.(*instance.GetServerResponse)
server := getServerResp.Server

client := core.ExtractClient(ctx)
vpcAPI := vpc.NewAPI(client)
Expand All @@ -405,8 +431,8 @@ func serverGetBuilder(c *core.Command) *core.Command {

nics := []customNICs{}

for _, nic := range getServerResp.Server.PrivateNics {
region, err := getServerResp.Server.Zone.Region()
for _, nic := range server.PrivateNics {
region, err := server.Zone.Region()
if err != nil {
return nil, err
}
Expand All @@ -428,7 +454,7 @@ func serverGetBuilder(c *core.Command) *core.Command {
volumes := map[string]*customVolume{}
blockAPI := block.NewAPI(client)

for _, volume := range getServerResp.Server.Volumes {
for _, volume := range server.Volumes {
customVol := &customVolume{
ID: volume.ID,
Zone: volume.Zone.String(),
Expand Down Expand Up @@ -473,14 +499,22 @@ func serverGetBuilder(c *core.Command) *core.Command {
volumes[volume.ID] = customVol
}

// Display warning if server-type is deprecated
warnings := []string(nil)
if server.EndOfService {
warnings = warningServerTypeDeprecated(ctx, client, server)
}

return &struct {
*instance.Server
Volumes []*customVolume
PrivateNics []customNICs `json:"private_nics"`
Warnings []string `json:"warnings"`
}{
getServerResp.Server,
server,
orderVolumes(volumes),
nics,
warnings,
}, nil
}

Expand Down Expand Up @@ -510,6 +544,11 @@ func serverGetBuilder(c *core.Command) *core.Command {
FieldName: "PrivateNics",
Title: "Private NICs",
},
{
FieldName: "Warnings",
Title: "Warnings",
HideIfEmpty: true,
},
},
}

Expand Down
24 changes: 20 additions & 4 deletions internal/namespaces/instance/v1/custom_server_action_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ func Test_ServerTerminate(t *testing.T) {
func(t *testing.T, ctx *core.CheckFuncCtx) {
t.Helper()
api := instanceSDK.NewAPI(ctx.Client)
server := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
server := testhelpers.MapValue[*instance.ServerWithWarningsResponse](
t,
ctx.Meta,
"Server",
).Server
assert.NotNil(t, server.PublicIP)
_, err := api.GetIP(&instanceSDK.GetIPRequest{
IP: server.PublicIP.ID,
Expand All @@ -59,7 +63,11 @@ func Test_ServerTerminate(t *testing.T) {
func(t *testing.T, ctx *core.CheckFuncCtx) {
t.Helper()
api := instanceSDK.NewAPI(ctx.Client)
server := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
server := testhelpers.MapValue[*instance.ServerWithWarningsResponse](
t,
ctx.Meta,
"Server",
).Server
assert.NotNil(t, server.PublicIP)

_, err := api.GetIP(&instanceSDK.GetIPRequest{
Expand Down Expand Up @@ -107,7 +115,11 @@ func Test_ServerTerminate(t *testing.T) {
func(t *testing.T, ctx *core.CheckFuncCtx) {
t.Helper()
api := instanceSDK.NewAPI(ctx.Client)
server := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
server := testhelpers.MapValue[*instance.ServerWithWarningsResponse](
t,
ctx.Meta,
"Server",
).Server
volume := testhelpers.MapTValue(t, server.Volumes, "0")

_, err := api.GetVolume(&instanceSDK.GetVolumeRequest{
Expand Down Expand Up @@ -183,7 +195,11 @@ func Test_ServerAction(t *testing.T) {
core.TestCheckExitCode(0),
func(t *testing.T, ctx *core.CheckFuncCtx) {
t.Helper()
storedServer := testhelpers.MapValue[*instanceSDK.Server](t, ctx.Meta, "Server")
storedServer := testhelpers.MapValue[*instance.ServerWithWarningsResponse](
t,
ctx.Meta,
"Server",
).Server
api := instanceSDK.NewAPI(ctx.Client)
resp, err := api.GetServer(&instanceSDK.GetServerRequest{
Zone: storedServer.Zone,
Expand Down
32 changes: 29 additions & 3 deletions internal/namespaces/instance/v1/custom_server_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,18 +186,35 @@ func serverCreateCommand() *core.Command {
scw instance server create image=ubuntu_focal ip=$ip`,
},
},
View: &core.View{
Sections: []*core.ViewSection{
{
FieldName: "Warnings",
Title: "Warnings",
HideIfEmpty: true,
},
},
},
}
}

func instanceWaitServerCreateRun() core.WaitFunc {
return func(ctx context.Context, argsI, respI interface{}) (interface{}, error) {
return instance.NewAPI(core.ExtractClient(ctx)).
resp := respI.(*ServerWithWarningsResponse)
serverID := resp.Server.ID

waitServer, err := instance.NewAPI(core.ExtractClient(ctx)).
WaitForServer(&instance.WaitForServerRequest{
Zone: argsI.(*instanceCreateServerRequest).Zone,
ServerID: respI.(*instance.Server).ID,
ServerID: serverID,
Timeout: scw.TimeDurationPtr(serverActionTimeout),
RetryInterval: core.DefaultRetryInterval,
})

return &ServerWithWarningsResponse{
waitServer,
resp.Warnings,
}, err
}
}

Expand Down Expand Up @@ -339,7 +356,16 @@ func instanceServerCreateRun(ctx context.Context, argsI interface{}) (i interfac
}
}

return server, nil
// Display warning if server-type is deprecated
warnings := []string(nil)
if server.EndOfService {
warnings = warningServerTypeDeprecated(ctx, client, server)
}

return &ServerWithWarningsResponse{
server,
warnings,
}, nil
}

func addDefaultVolumes(
Expand Down
Loading
Loading