vhdbuilder/lister/main.go (56 lines of code) (raw):
package main
import (
"encoding/json"
"flag"
"fmt"
"log"
"os"
"github.com/Azure/agentbaker/vhdbuilder/lister/pkg/image"
)
type options struct {
sku string
nodeImageVersion string
outputPath string
}
func (o *options) validate() error {
if o.sku == "" {
return fmt.Errorf("sku must be specified")
}
if o.nodeImageVersion == "" {
return fmt.Errorf("node-image-version must be specified")
}
if o.outputPath == "" {
return fmt.Errorf("output-path must be specified")
}
return nil
}
var (
opts = &options{}
)
func parseFlags() {
flag.StringVar(&opts.sku, "sku", "", "the VHD's SKU")
flag.StringVar(&opts.nodeImageVersion, "node-image-version", "", "the VHD's node image version")
flag.StringVar(&opts.outputPath, "output-path", "", "where to store the generated image list")
flag.Parse()
}
func main() {
parseFlags()
if err := opts.validate(); err != nil {
log.Printf("unable to validate command line options: %s", err)
os.Exit(1)
}
imageList, err := image.ListImages(opts.sku, opts.nodeImageVersion)
if err != nil {
log.Printf("unable to list images: %s", err)
os.Exit(1)
}
raw, err := json.MarshalIndent(imageList, "", " ")
if err != nil {
log.Printf("unable to marshal generated image list: %s", err)
os.Exit(1)
}
if err := os.WriteFile(opts.outputPath, raw, os.ModePerm); err != nil {
log.Printf("unable to write generated image list content to file %s: %s", opts.outputPath, err)
os.Exit(1)
}
}