github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/cluster/common.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package cluster contains Jackal-specific cluster management functions. 5 package cluster 6 7 import ( 8 "time" 9 10 "github.com/Racer159/jackal/src/config" 11 "github.com/Racer159/jackal/src/pkg/k8s" 12 "github.com/Racer159/jackal/src/pkg/message" 13 ) 14 15 // Cluster is a wrapper for the k8s package that provides Jackal-specific cluster management functions. 16 type Cluster struct { 17 *k8s.K8s 18 } 19 20 const ( 21 // DefaultTimeout is the default time to wait for a cluster to be ready. 22 DefaultTimeout = 30 * time.Second 23 agentLabel = "jackal.dev/agent" 24 ) 25 26 var labels = k8s.Labels{ 27 config.JackalManagedByLabel: "jackal", 28 } 29 30 // NewClusterOrDie creates a new Cluster instance and waits up to 30 seconds for the cluster to be ready or throws a fatal error. 31 func NewClusterOrDie() *Cluster { 32 c, err := NewClusterWithWait(DefaultTimeout) 33 if err != nil { 34 message.Fatalf(err, "Failed to connect to cluster") 35 } 36 37 return c 38 } 39 40 // NewClusterWithWait creates a new Cluster instance and waits for the given timeout for the cluster to be ready. 41 func NewClusterWithWait(timeout time.Duration) (*Cluster, error) { 42 spinner := message.NewProgressSpinner("Waiting for cluster connection (%s timeout)", timeout.String()) 43 defer spinner.Stop() 44 45 c := &Cluster{} 46 var err error 47 48 c.K8s, err = k8s.New(message.Debugf, labels) 49 if err != nil { 50 return nil, err 51 } 52 53 err = c.WaitForHealthyCluster(timeout) 54 if err != nil { 55 return nil, err 56 } 57 58 spinner.Success() 59 60 return c, nil 61 } 62 63 // NewCluster creates a new Cluster instance and validates connection to the cluster by fetching the Kubernetes version. 64 func NewCluster() (*Cluster, error) { 65 c := &Cluster{} 66 var err error 67 68 c.K8s, err = k8s.New(message.Debugf, labels) 69 if err != nil { 70 return nil, err 71 } 72 73 // Dogsled the version output. We just want to ensure no errors were returned to validate cluster connection. 74 _, err = c.GetServerVersion() 75 if err != nil { 76 return nil, err 77 } 78 79 return c, nil 80 }