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  }