github.com/grahambrereton-form3/tilt@v0.10.18/internal/docker/switch.go (about) 1 package docker 2 3 import ( 4 "context" 5 "io" 6 "sync" 7 8 "github.com/docker/distribution/reference" 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/filters" 11 12 "github.com/windmilleng/tilt/internal/container" 13 "github.com/windmilleng/tilt/pkg/model" 14 ) 15 16 // A Cli implementation that lets us switch back and forth between a local 17 // Docker instance and one that lives in our K8s cluster. 18 19 type switchCli struct { 20 localCli LocalClient 21 clusterCli ClusterClient 22 orc model.Orchestrator 23 mu sync.Mutex 24 } 25 26 func ProvideSwitchCli(clusterCli ClusterClient, localCli LocalClient) *switchCli { 27 return &switchCli{ 28 localCli: localCli, 29 clusterCli: clusterCli, 30 orc: model.OrchestratorK8s, 31 } 32 } 33 34 func (c *switchCli) client() Client { 35 c.mu.Lock() 36 defer c.mu.Unlock() 37 if c.orc == model.OrchestratorK8s { 38 return c.clusterCli 39 } 40 return c.localCli 41 } 42 43 func (c *switchCli) SetOrchestrator(orc model.Orchestrator) { 44 c.mu.Lock() 45 defer c.mu.Unlock() 46 c.orc = orc 47 } 48 func (c *switchCli) CheckConnected() error { 49 return c.client().CheckConnected() 50 } 51 func (c *switchCli) Env() Env { 52 return c.client().Env() 53 } 54 func (c *switchCli) BuilderVersion() types.BuilderVersion { 55 return c.client().BuilderVersion() 56 } 57 func (c *switchCli) ServerVersion() types.Version { 58 return c.client().ServerVersion() 59 } 60 func (c *switchCli) ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error) { 61 return c.client().ContainerList(ctx, options) 62 } 63 func (c *switchCli) ContainerRestartNoWait(ctx context.Context, containerID string) error { 64 return c.client().ContainerRestartNoWait(ctx, containerID) 65 } 66 func (c *switchCli) CopyToContainerRoot(ctx context.Context, container string, content io.Reader) error { 67 return c.client().CopyToContainerRoot(ctx, container, content) 68 } 69 func (c *switchCli) ExecInContainer(ctx context.Context, cID container.ID, cmd model.Cmd, out io.Writer) error { 70 return c.client().ExecInContainer(ctx, cID, cmd, out) 71 } 72 func (c *switchCli) ImagePush(ctx context.Context, ref reference.NamedTagged) (io.ReadCloser, error) { 73 return c.client().ImagePush(ctx, ref) 74 } 75 func (c *switchCli) ImageBuild(ctx context.Context, buildContext io.Reader, options BuildOptions) (types.ImageBuildResponse, error) { 76 return c.client().ImageBuild(ctx, buildContext, options) 77 } 78 func (c *switchCli) ImageTag(ctx context.Context, source, target string) error { 79 return c.client().ImageTag(ctx, source, target) 80 } 81 func (c *switchCli) ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error) { 82 return c.client().ImageInspectWithRaw(ctx, imageID) 83 } 84 func (c *switchCli) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error) { 85 return c.client().ImageList(ctx, options) 86 } 87 func (c *switchCli) ImageRemove(ctx context.Context, imageID string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) { 88 return c.client().ImageRemove(ctx, imageID, options) 89 } 90 func (c *switchCli) NewVersionError(APIrequired, feature string) error { 91 return c.client().NewVersionError(APIrequired, feature) 92 } 93 func (c *switchCli) BuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error) { 94 return c.client().BuildCachePrune(ctx, opts) 95 } 96 func (c *switchCli) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) { 97 return c.client().ContainersPrune(ctx, pruneFilters) 98 } 99 100 var _ Client = &switchCli{}