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  }