github.com/kyma-project/kyma-environment-broker@v0.0.1/common/gardener/client.go (about) 1 package gardener 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 7 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 8 "k8s.io/apimachinery/pkg/runtime/schema" 9 restclient "k8s.io/client-go/rest" 10 "k8s.io/client-go/tools/clientcmd" 11 ) 12 13 type SecretBinding struct { 14 unstructured.Unstructured 15 } 16 17 func (b SecretBinding) GetSecretRefName() string { 18 str, _, err := unstructured.NestedString(b.Unstructured.Object, "secretRef", "name") 19 if err != nil { 20 // NOTE this is a safety net, gardener v1beta1 API would need to break the contract for this to panic 21 panic(fmt.Sprintf("SecretBinding missing field '.secretRef.name': %v", err)) 22 } 23 return str 24 } 25 26 func (b SecretBinding) GetSecretRefNamespace() string { 27 str, _, err := unstructured.NestedString(b.Unstructured.Object, "secretRef", "namespace") 28 if err != nil { 29 // NOTE this is a safety net, gardener v1beta1 API would need to break the contract for this to panic 30 panic(fmt.Sprintf("SecretBinding missing field '.secretRef.namespace': %v", err)) 31 } 32 return str 33 } 34 35 type Shoot struct { 36 unstructured.Unstructured 37 } 38 39 func (b Shoot) GetSpecSecretBindingName() string { 40 str, _, err := unstructured.NestedString(b.Unstructured.Object, "spec", "secretBindingName") 41 if err != nil { 42 // NOTE this is a safety net, gardener v1beta1 API would need to break the contract for this to panic 43 panic(fmt.Sprintf("Shoot missing field '.spec.secretBindingName': %v", err)) 44 } 45 return str 46 } 47 48 func (b Shoot) GetSpecMaintenanceTimeWindowBegin() string { 49 str, _, err := unstructured.NestedString(b.Unstructured.Object, "spec", "maintenance", "timeWindow", "begin") 50 if err != nil { 51 // NOTE this is a safety net, gardener v1beta1 API would need to break the contract for this to panic 52 panic(fmt.Sprintf("Shoot missing field '.spec.maintenance.timeWindow.begin': %v", err)) 53 } 54 return str 55 } 56 57 func (b Shoot) GetSpecMaintenanceTimeWindowEnd() string { 58 str, _, err := unstructured.NestedString(b.Unstructured.Object, "spec", "maintenance", "timeWindow", "end") 59 if err != nil { 60 // NOTE this is a safety net, gardener v1beta1 API would need to break the contract for this to panic 61 panic(fmt.Sprintf("Shoot missing field '.spec.maintenance.timeWindow.end': %v", err)) 62 } 63 return str 64 } 65 66 func (b Shoot) GetSpecRegion() string { 67 str, _, err := unstructured.NestedString(b.Unstructured.Object, "spec", "region") 68 if err != nil { 69 // NOTE this is a safety net, gardener v1beta1 API would need to break the contract for this to panic 70 panic(fmt.Sprintf("Shoot missing field '.spec.region': %v", err)) 71 } 72 return str 73 } 74 75 var SecretBindingResource = schema.GroupVersionResource{Group: "core.gardener.cloud", Version: "v1beta1", Resource: "secretbindings"} 76 var ShootResource = schema.GroupVersionResource{Group: "core.gardener.cloud", Version: "v1beta1", Resource: "shoots"} 77 78 func NewGardenerClusterConfig(kubeconfigPath string) (*restclient.Config, error) { 79 80 rawKubeconfig, err := ioutil.ReadFile(kubeconfigPath) 81 if err != nil { 82 return nil, fmt.Errorf("failed to read Gardener Kubeconfig from path %s: %s", kubeconfigPath, err.Error()) 83 } 84 85 gardenerClusterConfig, err := RESTConfig(rawKubeconfig) 86 if err != nil { 87 return nil, fmt.Errorf("failed to create RESTConfig for Gardener client: %v", err) 88 } 89 90 return gardenerClusterConfig, nil 91 } 92 93 func RESTConfig(kubeconfig []byte) (*restclient.Config, error) { 94 return clientcmd.RESTConfigFromKubeConfig(kubeconfig) 95 }