Skip to content

Commit

Permalink
fix: use resume and suspend for cube server, vmState to get server st…
Browse files Browse the repository at this point in the history
…ate (#90)
  • Loading branch information
rmocanu-ionos committed Aug 9, 2023
1 parent 034776b commit 261b3cd
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 14 deletions.
16 changes: 16 additions & 0 deletions internal/utils/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,14 @@ func (c *Client) StartServer(datacenterId, serverId string) error {
return nil
}

func (c *Client) ResumeServer(datacenterId, serverId string) error {
_, err := c.ServersApi.DatacentersServersResumePost(c.ctx, datacenterId, serverId).Execute()
if err != nil {
return sdk_utils.ShortenOpenApiErr(err)
}
return nil
}

func (c *Client) StopServer(datacenterId, serverId string) error {
_, err := c.ServersApi.DatacentersServersStopPost(c.ctx, datacenterId, serverId).Execute()
if err != nil {
Expand All @@ -296,6 +304,14 @@ func (c *Client) StopServer(datacenterId, serverId string) error {
return nil
}

func (c *Client) SuspendServer(datacenterId, serverId string) error {
_, err := c.ServersApi.DatacentersServersSuspendPost(c.ctx, datacenterId, serverId).Execute()
if err != nil {
return sdk_utils.ShortenOpenApiErr(err)
}
return nil
}

func (c *Client) RestartServer(datacenterId, serverId string) error {
_, err := c.ServersApi.DatacentersServersRebootPost(c.ctx, datacenterId, serverId).Execute()
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions internal/utils/client_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ type ClientService interface {
GetNic(datacenterId, ServerId, NicId string) (*ionoscloud.Nic, error)
GetTemplates() (*ionoscloud.Templates, error)
StartServer(datacenterId, serverId string) error
ResumeServer(datacenterId, serverId string) error
StopServer(datacenterId, serverId string) error
SuspendServer(datacenterId, serverId string) error
RestartServer(datacenterId, serverId string) error
RemoveServer(datacenterId, serverId string) error
CreateAttachVolume(datacenterId, serverId string, properties *ClientVolumeProperties) (*ionoscloud.Volume, error)
Expand Down
28 changes: 28 additions & 0 deletions internal/utils/mocks/ClientService.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 21 additions & 8 deletions ionoscloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -933,7 +933,14 @@ func (d *Driver) Start() error {
return fmt.Errorf("error getting state: %w", err)
}
if serverState != state.Running {
err = d.client().StartServer(d.DatacenterId, d.ServerId)
if d.ServerType == "ENTERPRISE" {
err = d.client().StartServer(d.DatacenterId, d.ServerId)
} else if d.ServerType == "CUBE" {
err = d.client().ResumeServer(d.DatacenterId, d.ServerId)
} else {
err = fmt.Errorf("Wrong server type: %s", d.ServerType)
}

if err != nil {
return fmt.Errorf("error starting server: %w", err)
}
Expand All @@ -953,7 +960,13 @@ func (d *Driver) Stop() error {
log.Infof("Host is already stopped")
return nil
}
err = d.client().StopServer(d.DatacenterId, d.ServerId)
if d.ServerType == "ENTERPRISE" {
err = d.client().StopServer(d.DatacenterId, d.ServerId)
} else if d.ServerType == "CUBE" {
err = d.client().SuspendServer(d.DatacenterId, d.ServerId)
} else {
err = fmt.Errorf("Wrong server type: %s", d.ServerType)
}
if err != nil {
return fmt.Errorf("error stoping server: %w", err)
}
Expand Down Expand Up @@ -1015,15 +1028,17 @@ func (d *Driver) GetState() (state.State, error) {
return state.None, fmt.Errorf("error getting server: %w", err)
}

if metadata, ok := server.GetMetadataOk(); ok && metadata != nil {
if metadataState, ok := metadata.GetStateOk(); ok && metadataState != nil {
switch *metadataState {
if serverProperties, ok := server.GetPropertiesOk(); ok && serverProperties != nil {
if vmState, ok := serverProperties.GetVmStateOk(); ok && vmState != nil {
switch *vmState {
case "NOSTATE":
return state.None, nil
case "AVAILABLE":
case "RUNNING":
return state.Running, nil
case "PAUSED":
return state.Paused, nil
case "SUSPENDED":
return state.Stopped, nil
case "BLOCKED":
return state.Stopped, nil
case "SHUTDOWN":
Expand All @@ -1032,8 +1047,6 @@ func (d *Driver) GetState() (state.State, error) {
return state.Stopped, nil
case "CRASHED":
return state.Error, nil
case "INACTIVE":
return state.Stopped, nil
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions ionoscloud_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -806,7 +806,7 @@ func TestStartServerErr(t *testing.T) {
}

func TestStartRunningServer(t *testing.T) {
s := serverWithState(testVar, "AVAILABLE")
s := serverWithState(testVar, "RUNNING")
driver, clientMock := NewTestDriverFlagsSet(t, authFlagsSet)
driver.DatacenterId = testVar
driver.ServerId = testVar
Expand All @@ -826,7 +826,7 @@ func TestStopErr(t *testing.T) {
}

func TestStop(t *testing.T) {
s := serverWithState(testVar, "NOSTATE")
s := serverWithState(testVar, "SHUTOFF")
driver, clientMock := NewTestDriverFlagsSet(t, authFlagsSet)
driver.DatacenterId = testVar
driver.ServerId = testVar
Expand Down Expand Up @@ -1005,17 +1005,17 @@ func TestGetImageId(t *testing.T) {
func serverWithState(serverId, serverState string) *sdkgo.Server {
return &sdkgo.Server{
Id: &serverId,
Metadata: &sdkgo.DatacenterElementMetadata{
State: &serverState,
Properties: &sdkgo.ServerProperties{
VmState: &serverState,
},
}
}

func serverWithNicAttached(serverId, serverState, nicId string) *sdkgo.Server {
return &sdkgo.Server{
Id: &serverId,
Metadata: &sdkgo.DatacenterElementMetadata{
State: &serverState,
Properties: &sdkgo.ServerProperties{
VmState: &serverState,
},
Entities: &sdkgo.ServerEntities{
Nics: &sdkgo.Nics{
Expand Down

0 comments on commit 261b3cd

Please sign in to comment.