github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/package_stemcell/stemcell_generator/stemcell_generator.go (about)

     1  package stemcell_generator
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  )
     7  
     8  //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . ManifestGenerator
     9  type ManifestGenerator interface {
    10  	Manifest(reader io.Reader) (io.Reader, error)
    11  }
    12  
    13  //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . FileNameGenerator
    14  type FileNameGenerator interface {
    15  	FileName() string
    16  }
    17  
    18  //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . TarWriter
    19  type TarWriter interface {
    20  	Write(string, ...io.Reader) error
    21  }
    22  type StemcellGenerator struct {
    23  	manifestGenerator ManifestGenerator
    24  	fileNameGenerator FileNameGenerator
    25  	tarWriter         TarWriter
    26  }
    27  
    28  func NewStemcellGenerator(m ManifestGenerator, f FileNameGenerator, t TarWriter) *StemcellGenerator {
    29  	return &StemcellGenerator{m, f, t}
    30  }
    31  
    32  func (g *StemcellGenerator) Generate(image io.Reader) error {
    33  	manifest, err := g.manifestGenerator.Manifest(image)
    34  	if err != nil {
    35  		return fmt.Errorf("failed to generate stemcell manifest: %s", err)
    36  	}
    37  	filename := g.fileNameGenerator.FileName()
    38  
    39  	err = g.tarWriter.Write(filename, image, manifest)
    40  	if err != nil {
    41  		return fmt.Errorf("failed to generate stemcell tarball: %s", err)
    42  	}
    43  
    44  	return nil
    45  }