Skip to content

Commit cc41e3f

Browse files
author
Quentin Perez
committed
Add ScalewayImageIdentifier
1 parent 2960e9d commit cc41e3f

File tree

5 files changed

+37
-21
lines changed

5 files changed

+37
-21
lines changed

pkg/api/api.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,14 @@ type ScalewayImage struct {
233233
// FIXME: extra_volumes
234234
}
235235

236+
// ScalewayImageIdentifier represents a Scaleway Image Identifier
237+
type ScalewayImageIdentifier struct {
238+
Identifier string
239+
Arch string
240+
Region string
241+
Owner string
242+
}
243+
236244
// ScalewayOneImage represents the response of a GET /images/UUID API call
237245
type ScalewayOneImage struct {
238246
Image ScalewayImage `json:"image,omitempty"`
@@ -1810,24 +1818,30 @@ func (s *ScalewayAPI) GetSnapshotID(needle string) (string, error) {
18101818
}
18111819

18121820
// GetImageID returns exactly one image matching or dies
1813-
func (s *ScalewayAPI) GetImageID(needle string, exitIfMissing bool) (string, string, error) {
1821+
func (s *ScalewayAPI) GetImageID(needle string, exitIfMissing bool) (*ScalewayImageIdentifier, error) {
18141822
// Parses optional type prefix, i.e: "image:name" -> "name"
18151823
_, needle = parseNeedle(needle)
18161824

18171825
images, err := s.ResolveImage(needle)
18181826
if err != nil {
1819-
return "", "", fmt.Errorf("Unable to resolve image %s: %s", needle, err)
1827+
return nil, fmt.Errorf("Unable to resolve image %s: %s", needle, err)
18201828
}
18211829
if len(images) == 1 {
1822-
return images[0].Identifier, images[0].Arch, nil
1830+
return &ScalewayImageIdentifier{
1831+
Identifier: images[0].Identifier,
1832+
Arch: images[0].Arch,
1833+
// FIXME region, owner hardcoded
1834+
Region: "fr-1",
1835+
Owner: "",
1836+
}, nil
18231837
}
18241838
if len(images) == 0 {
18251839
if exitIfMissing {
1826-
return "", "", fmt.Errorf("No such image: %s", needle)
1840+
return nil, fmt.Errorf("No such image: %s", needle)
18271841
}
1828-
return "", "", nil
1842+
return nil, nil
18291843
}
1830-
return "", "", showResolverResults(needle, images)
1844+
return nil, showResolverResults(needle, images)
18311845
}
18321846

18331847
// GetSecurityGroups returns a ScalewaySecurityGroups

pkg/api/helpers.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,10 @@ func CreateServer(api *ScalewayAPI, c *ConfigCreateServer) (string, error) {
349349
}
350350
}
351351
// FIXME build images only on ARM ?
352-
archImage, imageID := "arm", ""
353-
352+
imageIdentifier := &ScalewayImageIdentifier{
353+
Arch: "arm",
354+
Region: "fr-1",
355+
}
354356
server.Name = c.Name
355357
inheritingVolume := false
356358
_, err := humanize.ParseBytes(c.ImageName)
@@ -365,12 +367,12 @@ func CreateServer(api *ScalewayAPI, c *ConfigCreateServer) (string, error) {
365367
// Use an existing image
366368
// FIXME: handle snapshots
367369
inheritingVolume = true
368-
imageID, archImage, err = api.GetImageID(c.ImageName, false)
370+
imageIdentifier, err = api.GetImageID(c.ImageName, false)
369371
if err != nil {
370372
return "", err
371373
}
372-
if imageID != "" {
373-
server.Image = &imageID
374+
if imageIdentifier.Identifier != "" {
375+
server.Image = &imageIdentifier.Identifier
374376
} else {
375377
snapshotID, err := api.GetSnapshotID(c.ImageName)
376378
if err != nil {
@@ -387,7 +389,7 @@ func CreateServer(api *ScalewayAPI, c *ConfigCreateServer) (string, error) {
387389
}
388390
}
389391
if c.Bootscript != "" {
390-
bootscript, err := api.GetBootscriptID(c.Bootscript, archImage)
392+
bootscript, err := api.GetBootscriptID(c.Bootscript, imageIdentifier.Arch)
391393
if err != nil {
392394
return "", err
393395
}

pkg/commands/history.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ type HistoryArgs struct {
2222

2323
// RunHistory is the handler for 'scw history'
2424
func RunHistory(ctx CommandContext, args HistoryArgs) error {
25-
imageID, _, err := ctx.API.GetImageID(args.Image, true)
25+
imageID, err := ctx.API.GetImageID(args.Image, true)
2626
if err != nil {
2727
return err
2828
}
29-
image, err := ctx.API.GetImage(imageID)
29+
image, err := ctx.API.GetImage(imageID.Identifier)
3030
if err != nil {
31-
return fmt.Errorf("cannot get image %s: %v", imageID, err)
31+
return fmt.Errorf("cannot get image %s: %v", imageID.Identifier, err)
3232
}
3333

3434
if args.Quiet {
35-
fmt.Fprintln(ctx.Stdout, imageID)
35+
fmt.Fprintln(ctx.Stdout, imageID.Identifier)
3636
return nil
3737
}
3838

pkg/commands/ps.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@ func RunPs(ctx CommandContext, args PsArgs) error {
8282
goto skipServer
8383
}
8484
case "image":
85-
imageID, _, err := ctx.API.GetImageID(value, true)
85+
imageID, err := ctx.API.GetImageID(value, true)
8686
if err != nil {
8787
goto skipServer
8888
}
89-
if imageID != server.Image.Identifier {
89+
if imageID.Identifier != server.Image.Identifier {
9090
goto skipServer
9191
}
9292
case "ip":

pkg/commands/rmi.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ type RmiArgs struct {
1919
func RunRmi(ctx CommandContext, args RmiArgs) error {
2020
hasError := false
2121
for _, needle := range args.Images {
22-
image, _, err := ctx.API.GetImageID(needle, true)
22+
image, err := ctx.API.GetImageID(needle, true)
2323
if err != nil {
2424
return err
2525
}
26-
if err = ctx.API.DeleteImage(image); err != nil {
27-
logrus.Errorf("failed to delete image %s: %s", image, err)
26+
if err = ctx.API.DeleteImage(image.Identifier); err != nil {
27+
logrus.Errorf("failed to delete image %s: %s", image.Identifier, err)
2828
hasError = true
2929
} else {
3030
fmt.Fprintln(ctx.Stdout, needle)

0 commit comments

Comments
 (0)