mirror of
				https://github.com/siderolabs/talos.git
				synced 2025-10-31 00:11:36 +01:00 
			
		
		
		
	Also uncomment Azure uploader. Add the Azure environment variables to the Makefile cloud-images step. Change disk size and tier to 16GiB and tier: P3 Add boolean value to drone pipeline and the cloud images hack will check the value to determine which Azure Compute Gallery to push images to. Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com> Signed-off-by: Christian Rolland <christian.rolland@siderolabs.com>
		
			
				
	
	
		
			119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.7 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 implements Talos cloud image uploader.
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	cryptorand "crypto/rand"
 | |
| 	"encoding/binary"
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"io"
 | |
| 	"log"
 | |
| 	"math/rand"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 	"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() {
 | |
| 	if err := run(); err != nil {
 | |
| 		log.Fatalf("%s", err)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func run() error {
 | |
| 	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.StringVar(&DefaultOptions.AzureAbbrevTag, "abbrev-tag", DefaultOptions.AzureAbbrevTag, "abbreviated 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))) //nolint:staticcheck
 | |
| 
 | |
| 	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)
 | |
| 	})
 | |
| 
 | |
| 	g.Go(func() error {
 | |
| 		azure := AzureUploader{
 | |
| 			Options: DefaultOptions,
 | |
| 		}
 | |
| 
 | |
| 		return azure.AzureGalleryUpload(ctx)
 | |
| 	})
 | |
| 
 | |
| 	if err = g.Wait(); err != nil {
 | |
| 		return fmt.Errorf("failed: %w", err)
 | |
| 	}
 | |
| 
 | |
| 	f, err := os.Create(filepath.Join(DefaultOptions.ArtifactsPath, "cloud-images.json"))
 | |
| 	if err != nil {
 | |
| 		return fmt.Errorf("failed: %w", err)
 | |
| 	}
 | |
| 
 | |
| 	defer f.Close() //nolint:errcheck
 | |
| 
 | |
| 	e := json.NewEncoder(io.MultiWriter(os.Stdout, f))
 | |
| 	e.SetIndent("", "  ")
 | |
| 
 | |
| 	return e.Encode(&result)
 | |
| }
 |