talos/hack/cloud-image-uploader/main.go
Andrey Smirnov eb0b64d313 chore: list specifically for enabled regions
AWS now has opt-in regions which are not enabled by default, so we need
to ignore such regions to avoid failures.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2021-04-20 05:47:30 -07:00

92 lines
2.1 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package main
import (
"context"
cryptorand "crypto/rand"
"encoding/binary"
"encoding/json"
"log"
"math/rand"
"os"
"sync"
"github.com/spf13/pflag"
"golang.org/x/sync/errgroup"
)
// Result of the upload process.
type Result []CloudImage
// CloudImage is the record official cloud image.
type CloudImage struct {
Cloud string `json:"cloud"`
Tag string `json:"version"`
Region string `json:"region"`
Arch string `json:"arch"`
Type string `json:"type"`
ID string `json:"id"`
}
var (
result Result
resultMu sync.Mutex
)
func pushResult(image CloudImage) {
resultMu.Lock()
defer resultMu.Unlock()
result = append(result, image)
}
func main() {
var err error
DefaultOptions.AWSRegions, err = GetAWSDefaultRegions()
if err != nil {
log.Printf("failed to get a list of enabled AWS regions: %s, ignored", err)
}
pflag.StringSliceVar(&DefaultOptions.Architectures, "architectures", DefaultOptions.Architectures, "list of architectures to process")
pflag.StringVar(&DefaultOptions.ArtifactsPath, "artifacts-path", DefaultOptions.ArtifactsPath, "artifacts path")
pflag.StringVar(&DefaultOptions.Tag, "tag", DefaultOptions.Tag, "tag (version) of the uploaded image")
pflag.StringSliceVar(&DefaultOptions.AWSRegions, "aws-regions", DefaultOptions.AWSRegions, "list of AWS regions to upload to")
pflag.Parse()
seed := make([]byte, 8)
if _, err := cryptorand.Read(seed); err != nil {
log.Fatalf("error seeding rand: %s", err)
}
rand.Seed(int64(binary.LittleEndian.Uint64(seed)))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
var g *errgroup.Group
g, ctx = errgroup.WithContext(ctx)
g.Go(func() error {
aws := AWSUploader{
Options: DefaultOptions,
}
return aws.Upload(ctx)
})
if err := g.Wait(); err != nil {
log.Fatalf("failed: %s", err)
}
e := json.NewEncoder(os.Stdout)
e.SetIndent("", " ")
e.Encode(&result) //nolint:errcheck
}