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  }