Skip to content

Commit e0da2be

Browse files
jerome-quereQuentinBrosse
authored andcommitted
instance: handle image label in CreateServer
1 parent 99e489a commit e0da2be

File tree

5 files changed

+1020
-6
lines changed

5 files changed

+1020
-6
lines changed

api/instance/v1/instance_sdk.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,7 +1429,7 @@ func (r *ListServersResponse) UnsafeAppend(res interface{}) (int, scw.SdkError)
14291429
return len(results.Servers), nil
14301430
}
14311431

1432-
type CreateServerRequest struct {
1432+
type createServerRequest struct {
14331433
Zone scw.Zone `json:"-"`
14341434
// Name display the server name
14351435
Name string `json:"name,omitempty"`
@@ -1455,8 +1455,8 @@ type CreateServerRequest struct {
14551455
ComputeCluster string `json:"compute_cluster,omitempty"`
14561456
}
14571457

1458-
// CreateServer create server
1459-
func (s *API) CreateServer(req *CreateServerRequest, opts ...scw.RequestOption) (*CreateServerResponse, error) {
1458+
// createServer create server
1459+
func (s *API) createServer(req *createServerRequest, opts ...scw.RequestOption) (*CreateServerResponse, error) {
14601460
var err error
14611461

14621462
if req.Organization == "" {

api/instance/v1/server_utils.go

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,46 @@ import (
77
"net/http"
88
"time"
99

10+
"github.com/scaleway/scaleway-sdk-go/api/marketplace/v1"
1011
"github.com/scaleway/scaleway-sdk-go/internal/async"
1112
"github.com/scaleway/scaleway-sdk-go/internal/errors"
13+
"github.com/scaleway/scaleway-sdk-go/internal/uuid"
1214
"github.com/scaleway/scaleway-sdk-go/scw"
1315
)
1416

1517
type UpdateServerRequest updateServerRequest
1618

17-
// UpdateServer updates a server
19+
type CreateServerRequest createServerRequest
20+
21+
// CreateServer creates a server.
22+
func (s *API) CreateServer(req *CreateServerRequest, opts ...scw.RequestOption) (*CreateServerResponse, error) {
23+
24+
// If image is not a UUID we try to fetch it from marketplace.
25+
if !uuid.IsUUID(req.Image) {
26+
apiMarketplace := marketplace.NewAPI(s.client)
27+
imageId, err := apiMarketplace.GetLocalImageIDByLabel(&marketplace.GetLocalImageIDByLabelRequest{
28+
ImageLabel: req.Image,
29+
Zone: req.Zone,
30+
CommercialType: req.CommercialType,
31+
})
32+
if err != nil {
33+
return nil, err
34+
}
35+
req.Image = imageId
36+
}
37+
38+
return s.createServer((*createServerRequest)(req), opts...)
39+
}
40+
41+
// UpdateServer updates a server.
1842
//
1943
// Note: Implementation is thread-safe.
2044
func (s *API) UpdateServer(req *UpdateServerRequest, opts ...scw.RequestOption) (*UpdateServerResponse, error) {
2145
defer lockServer(req.Zone, req.ServerID).Unlock()
2246
return s.updateServer((*updateServerRequest)(req), opts...)
2347
}
2448

25-
// waitForServerRequest is used by waitForServer method
49+
// waitForServerRequest is used by waitForServer method.
2650
type waitForServerRequest struct {
2751
ServerID string
2852
Zone scw.Zone
@@ -63,7 +87,7 @@ func (s *API) waitForServer(req *waitForServerRequest) (*Server, scw.SdkError) {
6387
return server.(*Server), nil
6488
}
6589

66-
// ServerActionAndWaitRequest is used by ServerActionAndWait method
90+
// ServerActionAndWaitRequest is used by ServerActionAndWait method.
6791
type ServerActionAndWaitRequest struct {
6892
ServerID string
6993
Zone scw.Zone

api/instance/v1/server_utils_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,28 @@ func TestAPI_AllServerUserData(t *testing.T) {
145145
}
146146
}
147147
}
148+
149+
func TestAPI_CreateServer(t *testing.T) {
150+
client, r, err := httprecorder.CreateRecordedScwClient("create-server")
151+
testhelpers.AssertNoError(t, err)
152+
defer func() {
153+
testhelpers.AssertNoError(t, r.Stop()) // Make sure recorder is stopped once done with it
154+
}()
155+
156+
instanceAPI := NewAPI(client)
157+
158+
res, err := instanceAPI.CreateServer(&CreateServerRequest{
159+
Zone: scw.ZoneFrPar1,
160+
CommercialType: "GP1-XS",
161+
Image: "ubuntu-bionic",
162+
})
163+
164+
testhelpers.AssertNoError(t, err)
165+
// this UUID might change when running the cassette later when the image "ubuntu-bionic" got a new version
166+
testhelpers.Equals(t, "f974feac-abae-4365-b988-8ec7d1cec10d", res.Server.Image.ID)
167+
err = instanceAPI.DeleteServer(&DeleteServerRequest{
168+
Zone: scw.ZoneFrPar1,
169+
ServerID: res.Server.ID,
170+
})
171+
testhelpers.AssertNoError(t, err)
172+
}

0 commit comments

Comments
 (0)