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