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 }