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 }