github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/worker/image/image_factory.go (about) 1 package image 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/lager" 7 "github.com/pf-qiu/concourse/v6/atc/worker" 8 ) 9 10 var ErrUnsupportedResourceType = errors.New("unsupported resource type") 11 12 type imageFactory struct{} 13 14 func NewImageFactory() worker.ImageFactory { 15 return &imageFactory{} 16 } 17 18 func (f *imageFactory) GetImage( 19 logger lager.Logger, 20 worker worker.Worker, 21 volumeClient worker.VolumeClient, 22 imageSpec worker.ImageSpec, 23 teamID int, 24 ) (worker.Image, error) { 25 if imageSpec.ImageArtifactSource != nil { 26 artifactVolume, existsOnWorker, err := imageSpec.ImageArtifactSource.ExistsOn(logger, worker) 27 if err != nil { 28 logger.Error("failed-to-check-if-volume-exists-on-worker", err) 29 return nil, err 30 } 31 32 if existsOnWorker { 33 return &imageProvidedByPreviousStepOnSameWorker{ 34 artifactVolume: artifactVolume, 35 imageSpec: imageSpec, 36 teamID: teamID, 37 volumeClient: volumeClient, 38 }, nil 39 } 40 41 return &imageProvidedByPreviousStepOnDifferentWorker{ 42 imageSpec: imageSpec, 43 teamID: teamID, 44 volumeClient: volumeClient, 45 }, nil 46 } 47 48 if imageSpec.ResourceType != "" { 49 return &imageFromBaseResourceType{ 50 worker: worker, 51 resourceTypeName: imageSpec.ResourceType, 52 teamID: teamID, 53 volumeClient: volumeClient, 54 }, nil 55 } 56 57 return &imageFromRootfsURI{ 58 url: imageSpec.ImageURL, 59 }, nil 60 }