github.com/grahambrereton-form3/tilt@v0.10.18/internal/synclet/sidecar/sidecar.go (about)

     1  package sidecar
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  
     8  	v1 "k8s.io/api/core/v1"
     9  	"k8s.io/apimachinery/pkg/api/resource"
    10  
    11  	"github.com/docker/distribution/reference"
    12  
    13  	"github.com/windmilleng/tilt/internal/container"
    14  	"github.com/windmilleng/tilt/pkg/logger"
    15  )
    16  
    17  func syncletPrivileged() *bool {
    18  	val := true
    19  	return &val
    20  }
    21  
    22  const DefaultSyncletImageName = "gcr.io/windmill-public-containers/tilt-synclet"
    23  
    24  // When we deploy Tilt for development, we override this with LDFLAGS
    25  var SyncletTag = "v20190904"
    26  
    27  const SyncletImageEnvVar = "TILT_SYNCLET_IMAGE"
    28  
    29  const SyncletContainerName = "tilt-synclet"
    30  
    31  type SyncletImageRef reference.NamedTagged
    32  type SyncletContainer *v1.Container
    33  
    34  func ProvideSyncletImageRef(ctx context.Context) (SyncletImageRef, error) {
    35  	v := os.Getenv(SyncletImageEnvVar)
    36  	if v != "" {
    37  		logger.Get(ctx).Infof("Read %s from environment: %v", SyncletImageEnvVar, v)
    38  		return syncletImageRefFromName(v)
    39  	}
    40  	return syncletImageRefFromName(DefaultSyncletImageName)
    41  }
    42  
    43  func syncletImageRefFromName(imageName string) (SyncletImageRef, error) {
    44  	ref, err := container.ParseNamedTagged(fmt.Sprintf("%s:%s", imageName, SyncletTag))
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  	return SyncletImageRef(ref), nil
    49  }
    50  
    51  func ProvideSyncletContainer(ref SyncletImageRef) SyncletContainer {
    52  	return SyncletContainer(&v1.Container{
    53  		Name:            SyncletContainerName,
    54  		Image:           ref.String(),
    55  		ImagePullPolicy: v1.PullIfNotPresent,
    56  		Resources:       v1.ResourceRequirements{Requests: v1.ResourceList{v1.ResourceCPU: resource.MustParse("0Mi")}},
    57  		VolumeMounts: []v1.VolumeMount{
    58  			v1.VolumeMount{
    59  				Name:      "tilt-dockersock",
    60  				MountPath: "/var/run/docker.sock",
    61  			},
    62  		},
    63  		SecurityContext: &v1.SecurityContext{
    64  			Privileged: syncletPrivileged(),
    65  		},
    66  	})
    67  }
    68  
    69  var SyncletVolume = v1.Volume{
    70  	Name: "tilt-dockersock",
    71  	VolumeSource: v1.VolumeSource{
    72  		HostPath: &v1.HostPathVolumeSource{
    73  			Path: "/var/run/docker.sock",
    74  		},
    75  	},
    76  }
    77  
    78  func PodSpecContainsSynclet(spec v1.PodSpec) bool {
    79  	for _, container := range spec.Containers {
    80  		if container.Name == SyncletContainerName {
    81  			return true
    82  		}
    83  	}
    84  	return false
    85  }