github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/imagetool/getImage.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/Cloud-Foundations/Dominator/lib/filesystem"
     7  	"github.com/Cloud-Foundations/Dominator/lib/filesystem/util"
     8  	"github.com/Cloud-Foundations/Dominator/lib/log"
     9  	"github.com/Cloud-Foundations/Dominator/lib/log/nulllogger"
    10  	"github.com/Cloud-Foundations/Dominator/lib/objectserver"
    11  	objectclient "github.com/Cloud-Foundations/Dominator/lib/objectserver/client"
    12  )
    13  
    14  func getImageSubcommand(args []string, logger log.DebugLogger) error {
    15  	_, objectClient := getClients()
    16  	if err := getImageAndWrite(objectClient, args[0], args[1]); err != nil {
    17  		return fmt.Errorf("Error getting image: %s", err)
    18  	}
    19  	return nil
    20  }
    21  
    22  func getImageAndWrite(objectClient *objectclient.ObjectClient, name,
    23  	dirname string) error {
    24  	fs, objectsGetter, err := getImageForUnpack(objectClient, name)
    25  	if err != nil {
    26  		return err
    27  	}
    28  	err = util.Unpack(fs, objectsGetter, dirname, nulllogger.New())
    29  	if err != nil {
    30  		return err
    31  	}
    32  	return util.WriteImageName(dirname, name)
    33  }
    34  
    35  func getImageForUnpack(objectClient *objectclient.ObjectClient, name string) (
    36  	*filesystem.FileSystem, objectserver.ObjectsGetter, error) {
    37  	fs, err := getTypedImage(name)
    38  	if err != nil {
    39  		return nil, nil, err
    40  	}
    41  	if *computedFilesRoot == "" {
    42  		return fs, objectClient, nil
    43  	}
    44  	objectsGetter, err := util.ReplaceComputedFiles(fs,
    45  		&util.ComputedFilesData{RootDirectory: *computedFilesRoot},
    46  		objectClient)
    47  	if err != nil {
    48  		return nil, nil, err
    49  	}
    50  	return fs, objectsGetter, nil
    51  }