github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/core/kubernetesdiscovery/keys.go (about) 1 package kubernetesdiscovery 2 3 import ( 4 "time" 5 6 "k8s.io/apimachinery/pkg/types" 7 8 "github.com/tilt-dev/tilt/pkg/apis" 9 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 10 ) 11 12 // nsKey is a tuple of Cluster metadata and the K8s namespace being watched. 13 // 14 // If multiple clusters are are in use, it's possible to watch the same namespace 15 // in both, so the namespace name alone is not sufficient. Similarly, a Cluster 16 // object can change, so there might be multiple revisions active at once. 17 type nsKey struct { 18 cluster clusterKey 19 namespace string 20 } 21 22 func newNsKey(cluster *v1alpha1.Cluster, ns string) nsKey { 23 return nsKey{ 24 cluster: newClusterKey(cluster), 25 namespace: ns, 26 } 27 } 28 29 // uidKey is a tuple of Cluster metadata and the UID being watched. 30 // 31 // If multiple clusters are are in use, it's possible (albeit very unlikely) to 32 // watch the same UID in both, so the UID alone is not sufficient. Similarly, a 33 // Cluster object can change, so there might be multiple revisions active at 34 // once. 35 type uidKey struct { 36 cluster clusterKey 37 uid types.UID 38 } 39 40 func newUIDKey(cluster *v1alpha1.Cluster, uid types.UID) uidKey { 41 return uidKey{ 42 cluster: newClusterKey(cluster), 43 uid: uid, 44 } 45 } 46 47 type clusterKey struct { 48 name types.NamespacedName 49 revision time.Time 50 } 51 52 func newClusterKey(cluster *v1alpha1.Cluster) clusterKey { 53 rev := time.Time{} 54 if cluster.Status.ConnectedAt != nil { 55 rev = cluster.Status.ConnectedAt.Time 56 } 57 return clusterKey{ 58 name: apis.Key(cluster), 59 revision: rev, 60 } 61 }