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{}