Skip to content

Commit 385a6ff

Browse files
committed
api: add filter by region
1 parent 4033973 commit 385a6ff

File tree

2 files changed

+41
-25
lines changed

2 files changed

+41
-25
lines changed

pkg/api/api.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2084,11 +2084,12 @@ func showResolverResults(needle string, results ScalewayResolverResults) error {
20842084
w := tabwriter.NewWriter(os.Stderr, 20, 1, 3, ' ', 0)
20852085
defer w.Flush()
20862086
sort.Sort(results)
2087+
fmt.Fprintf(w, " IMAGEID\tFROM\tNAME\tZONE\tARCH\n")
20872088
for _, result := range results {
20882089
if result.Arch == "" {
20892090
result.Arch = "n/a"
20902091
}
2091-
fmt.Fprintf(w, "- %s\t%s\t%s\t%s\n", result.TruncIdentifier(), result.CodeName(), result.Name, result.Arch)
2092+
fmt.Fprintf(w, "- %s\t%s\t%s\t%s\t%s\n", result.TruncIdentifier(), result.CodeName(), result.Name, result.Region, result.Arch)
20922093
}
20932094
return fmt.Errorf("Too many candidates for %s (%d)", needle, len(results))
20942095
}
@@ -2142,6 +2143,19 @@ func FilterImagesByArch(res ScalewayResolverResults, arch string) (ret ScalewayR
21422143
return
21432144
}
21442145

2146+
// FilterImagesByRegion removes entry that doesn't match with region
2147+
func FilterImagesByRegion(res ScalewayResolverResults, region string) (ret ScalewayResolverResults) {
2148+
if region == "*" {
2149+
return res
2150+
}
2151+
for _, result := range res {
2152+
if result.Region == region {
2153+
ret = append(ret, result)
2154+
}
2155+
}
2156+
return
2157+
}
2158+
21452159
// GetImageID returns exactly one image matching
21462160
func (s *ScalewayAPI) GetImageID(needle, arch string) (*ScalewayImageIdentifier, error) {
21472161
// Parses optional type prefix, i.e: "image:name" -> "name"
@@ -2152,12 +2166,13 @@ func (s *ScalewayAPI) GetImageID(needle, arch string) (*ScalewayImageIdentifier,
21522166
return nil, fmt.Errorf("Unable to resolve image %s: %s", needle, err)
21532167
}
21542168
images = FilterImagesByArch(images, arch)
2169+
images = FilterImagesByRegion(images, s.Region)
21552170
if len(images) == 1 {
21562171
return &ScalewayImageIdentifier{
21572172
Identifier: images[0].Identifier,
21582173
Arch: images[0].Arch,
21592174
// FIXME region, owner hardcoded
2160-
Region: "",
2175+
Region: images[0].Region,
21612176
Owner: "",
21622177
}, nil
21632178
}

pkg/api/cache.go

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ const (
2929
CacheTitle
3030
// CacheMarketPlaceUUID is used to determine the UUID of local images
3131
CacheMarketPlaceUUID
32-
3332
// CacheMaxfield is used to determine the size of array
3433
CacheMaxfield
3534
)
@@ -87,13 +86,14 @@ type ScalewayResolverResult struct {
8786
Arch string
8887
Needle string
8988
RankMatch int
89+
Region string
9090
}
9191

9292
// ScalewayResolverResults is a list of `ScalewayResolverResult`
9393
type ScalewayResolverResults []ScalewayResolverResult
9494

9595
// NewScalewayResolverResult returns a new ScalewayResolverResult
96-
func NewScalewayResolverResult(Identifier, Name, Arch string, Type int) (ScalewayResolverResult, error) {
96+
func NewScalewayResolverResult(Identifier, Name, Arch, Region string, Type int) (ScalewayResolverResult, error) {
9797
if err := anonuuid.IsUUID(Identifier); err != nil {
9898
return ScalewayResolverResult{}, err
9999
}
@@ -102,6 +102,7 @@ func NewScalewayResolverResult(Identifier, Name, Arch string, Type int) (Scalewa
102102
Type: Type,
103103
Name: Name,
104104
Arch: Arch,
105+
Region: Region,
105106
}, nil
106107
}
107108

@@ -268,7 +269,7 @@ func (c *ScalewayCache) LookUpImages(needle string, acceptUUID bool) (ScalewayRe
268269

269270
if acceptUUID && anonuuid.IsUUID(needle) == nil {
270271
if fields, ok := c.Images[needle]; ok {
271-
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], IdentifierImage)
272+
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierImage)
272273
if err != nil {
273274
return ScalewayResolverResults{}, err
274275
}
@@ -282,22 +283,22 @@ func (c *ScalewayCache) LookUpImages(needle string, acceptUUID bool) (ScalewayRe
282283
nameRegex := regexp.MustCompile(`(?i)` + regexp.MustCompile(`[_-]`).ReplaceAllString(needle, ".*"))
283284
for identifier, fields := range c.Images {
284285
if fields[CacheTitle] == needle {
285-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierImage)
286+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierImage)
286287
if err != nil {
287288
return ScalewayResolverResults{}, err
288289
}
289290
entry.ComputeRankMatch(needle)
290291
exactMatches = append(exactMatches, entry)
291292
}
292293
if strings.HasPrefix(identifier, needle) || nameRegex.MatchString(fields[CacheTitle]) {
293-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierImage)
294+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierImage)
294295
if err != nil {
295296
return ScalewayResolverResults{}, err
296297
}
297298
entry.ComputeRankMatch(needle)
298299
res = append(res, entry)
299300
} else if strings.HasPrefix(fields[CacheMarketPlaceUUID], needle) || nameRegex.MatchString(fields[CacheMarketPlaceUUID]) {
300-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierImage)
301+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierImage)
301302
if err != nil {
302303
return ScalewayResolverResults{}, err
303304
}
@@ -323,7 +324,7 @@ func (c *ScalewayCache) LookUpSnapshots(needle string, acceptUUID bool) (Scalewa
323324

324325
if acceptUUID && anonuuid.IsUUID(needle) == nil {
325326
if fields, ok := c.Snapshots[needle]; ok {
326-
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], IdentifierSnapshot)
327+
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierSnapshot)
327328
if err != nil {
328329
return ScalewayResolverResults{}, err
329330
}
@@ -336,15 +337,15 @@ func (c *ScalewayCache) LookUpSnapshots(needle string, acceptUUID bool) (Scalewa
336337
nameRegex := regexp.MustCompile(`(?i)` + regexp.MustCompile(`[_-]`).ReplaceAllString(needle, ".*"))
337338
for identifier, fields := range c.Snapshots {
338339
if fields[CacheTitle] == needle {
339-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierSnapshot)
340+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierSnapshot)
340341
if err != nil {
341342
return ScalewayResolverResults{}, err
342343
}
343344
entry.ComputeRankMatch(needle)
344345
exactMatches = append(exactMatches, entry)
345346
}
346347
if strings.HasPrefix(identifier, needle) || nameRegex.MatchString(fields[CacheTitle]) {
347-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierSnapshot)
348+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierSnapshot)
348349
if err != nil {
349350
return ScalewayResolverResults{}, err
350351
}
@@ -370,7 +371,7 @@ func (c *ScalewayCache) LookUpVolumes(needle string, acceptUUID bool) (ScalewayR
370371

371372
if acceptUUID && anonuuid.IsUUID(needle) == nil {
372373
if fields, ok := c.Volumes[needle]; ok {
373-
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], IdentifierVolume)
374+
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierVolume)
374375
if err != nil {
375376
return ScalewayResolverResults{}, err
376377
}
@@ -382,15 +383,15 @@ func (c *ScalewayCache) LookUpVolumes(needle string, acceptUUID bool) (ScalewayR
382383
nameRegex := regexp.MustCompile(`(?i)` + regexp.MustCompile(`[_-]`).ReplaceAllString(needle, ".*"))
383384
for identifier, fields := range c.Volumes {
384385
if fields[CacheTitle] == needle {
385-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierVolume)
386+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierVolume)
386387
if err != nil {
387388
return ScalewayResolverResults{}, err
388389
}
389390
entry.ComputeRankMatch(needle)
390391
exactMatches = append(exactMatches, entry)
391392
}
392393
if strings.HasPrefix(identifier, needle) || nameRegex.MatchString(fields[CacheTitle]) {
393-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierVolume)
394+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierVolume)
394395
if err != nil {
395396
return ScalewayResolverResults{}, err
396397
}
@@ -416,7 +417,7 @@ func (c *ScalewayCache) LookUpBootscripts(needle string, acceptUUID bool) (Scale
416417

417418
if acceptUUID && anonuuid.IsUUID(needle) == nil {
418419
if fields, ok := c.Bootscripts[needle]; ok {
419-
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], IdentifierBootscript)
420+
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierBootscript)
420421
if err != nil {
421422
return ScalewayResolverResults{}, err
422423
}
@@ -428,15 +429,15 @@ func (c *ScalewayCache) LookUpBootscripts(needle string, acceptUUID bool) (Scale
428429
nameRegex := regexp.MustCompile(`(?i)` + regexp.MustCompile(`[_-]`).ReplaceAllString(needle, ".*"))
429430
for identifier, fields := range c.Bootscripts {
430431
if fields[CacheTitle] == needle {
431-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierBootscript)
432+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierBootscript)
432433
if err != nil {
433434
return ScalewayResolverResults{}, err
434435
}
435436
entry.ComputeRankMatch(needle)
436437
exactMatches = append(exactMatches, entry)
437438
}
438439
if strings.HasPrefix(identifier, needle) || nameRegex.MatchString(fields[CacheTitle]) {
439-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierBootscript)
440+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierBootscript)
440441
if err != nil {
441442
return ScalewayResolverResults{}, err
442443
}
@@ -462,7 +463,7 @@ func (c *ScalewayCache) LookUpServers(needle string, acceptUUID bool) (ScalewayR
462463

463464
if acceptUUID && anonuuid.IsUUID(needle) == nil {
464465
if fields, ok := c.Servers[needle]; ok {
465-
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], IdentifierServer)
466+
entry, err := NewScalewayResolverResult(needle, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierServer)
466467
if err != nil {
467468
return ScalewayResolverResults{}, err
468469
}
@@ -474,15 +475,15 @@ func (c *ScalewayCache) LookUpServers(needle string, acceptUUID bool) (ScalewayR
474475
nameRegex := regexp.MustCompile(`(?i)` + regexp.MustCompile(`[_-]`).ReplaceAllString(needle, ".*"))
475476
for identifier, fields := range c.Servers {
476477
if fields[CacheTitle] == needle {
477-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierServer)
478+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierServer)
478479
if err != nil {
479480
return ScalewayResolverResults{}, err
480481
}
481482
entry.ComputeRankMatch(needle)
482483
exactMatches = append(exactMatches, entry)
483484
}
484485
if strings.HasPrefix(identifier, needle) || nameRegex.MatchString(fields[CacheTitle]) {
485-
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], IdentifierServer)
486+
entry, err := NewScalewayResolverResult(identifier, fields[CacheTitle], fields[CacheArch], fields[CacheRegion], IdentifierServer)
486487
if err != nil {
487488
return ScalewayResolverResults{}, err
488489
}
@@ -551,7 +552,7 @@ func (c *ScalewayCache) LookUpIdentifiers(needle string) (ScalewayResolverResult
551552
return ScalewayResolverResults{}, err
552553
}
553554
for _, result := range servers {
554-
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, IdentifierServer)
555+
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, result.Region, IdentifierServer)
555556
if err != nil {
556557
return ScalewayResolverResults{}, err
557558
}
@@ -566,7 +567,7 @@ func (c *ScalewayCache) LookUpIdentifiers(needle string) (ScalewayResolverResult
566567
return ScalewayResolverResults{}, err
567568
}
568569
for _, result := range images {
569-
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, IdentifierImage)
570+
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, result.Region, IdentifierImage)
570571
if err != nil {
571572
return ScalewayResolverResults{}, err
572573
}
@@ -581,7 +582,7 @@ func (c *ScalewayCache) LookUpIdentifiers(needle string) (ScalewayResolverResult
581582
return ScalewayResolverResults{}, err
582583
}
583584
for _, result := range snapshots {
584-
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, IdentifierSnapshot)
585+
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, result.Region, IdentifierSnapshot)
585586
if err != nil {
586587
return ScalewayResolverResults{}, err
587588
}
@@ -596,7 +597,7 @@ func (c *ScalewayCache) LookUpIdentifiers(needle string) (ScalewayResolverResult
596597
return ScalewayResolverResults{}, err
597598
}
598599
for _, result := range volumes {
599-
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, IdentifierVolume)
600+
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, result.Region, IdentifierVolume)
600601
if err != nil {
601602
return ScalewayResolverResults{}, err
602603
}
@@ -611,7 +612,7 @@ func (c *ScalewayCache) LookUpIdentifiers(needle string) (ScalewayResolverResult
611612
return ScalewayResolverResults{}, err
612613
}
613614
for _, result := range bootscripts {
614-
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, IdentifierBootscript)
615+
entry, err := NewScalewayResolverResult(result.Identifier, result.Name, result.Arch, result.Region, IdentifierBootscript)
615616
if err != nil {
616617
return ScalewayResolverResults{}, err
617618
}

0 commit comments

Comments
 (0)