1package worker 2 3import ( 4 "code.cloudfoundry.org/lager" 5 "context" 6 "io" 7 "io/ioutil" 8 9 "github.com/concourse/concourse/atc" 10 "github.com/concourse/concourse/atc/db" 11) 12 13//go:generate counterfeiter . ImageFactory 14 15type ImageFactory interface { 16 GetImage( 17 logger lager.Logger, 18 worker Worker, 19 volumeClient VolumeClient, 20 imageSpec ImageSpec, 21 teamID int, 22 delegate ImageFetchingDelegate, 23 resourceTypes atc.VersionedResourceTypes, 24 ) (Image, error) 25} 26 27type FetchedImage struct { 28 Metadata ImageMetadata 29 Version atc.Version 30 URL string 31 Privileged bool 32} 33 34//go:generate counterfeiter . Image 35 36type Image interface { 37 FetchForContainer( 38 ctx context.Context, 39 logger lager.Logger, 40 container db.CreatingContainer, 41 ) (FetchedImage, error) 42} 43 44//go:generate counterfeiter . ImageFetchingDelegate 45 46type ImageFetchingDelegate interface { 47 Stdout() io.Writer 48 Stderr() io.Writer 49 ImageVersionDetermined(db.UsedResourceCache) error 50 51 RedactImageSource(source atc.Source) (atc.Source, error) 52} 53 54type ImageMetadata struct { 55 Env []string `json:"env"` 56 User string `json:"user"` 57} 58 59type NoopImageFetchingDelegate struct{} 60 61func (NoopImageFetchingDelegate) Stdout() io.Writer { return ioutil.Discard } 62func (NoopImageFetchingDelegate) Stderr() io.Writer { return ioutil.Discard } 63func (NoopImageFetchingDelegate) ImageVersionDetermined(db.UsedResourceCache) error { return nil } 64func (NoopImageFetchingDelegate) RedactImageSource(source atc.Source) (atc.Source, error) { 65 // As this is noop, redaction can just return an empty source. 66 return atc.Source{}, nil 67} 68