github.com/banzaicloud/operator-tools@v0.28.10/pkg/crd/README.md (about)

     1  
     2  ## CRD
     3  
     4  Once an operator is installed and CRDs are applied, these commands help to verify CRDs are in place.
     5  
     6  ```go
     7  package main
     8  
     9  import (
    10      "flag"
    11  	"fmt"
    12  	"log"
    13  	"os"
    14  	"path/filepath"
    15  
    16  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    17  	"k8s.io/client-go/kubernetes"
    18  	"k8s.io/client-go/tools/clientcmd"
    19  
    20  	"github.com/banzaicloud/operator-tools/pkg/crd"
    21  )
    22  
    23  func main() {
    24  	var kubeconfig *string
    25  	if home := homeDir(); home != "" {
    26  		kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
    27  	} else {
    28  		kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
    29  	}
    30  	flag.Parse()
    31  
    32  	config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    33  	if err != nil {
    34  		log.Fatal(err)
    35  	}
    36  	clientset, err := kubernetes.NewForConfig(config)
    37  	if err != nil {
    38  		log.Fatal(err)
    39  	}
    40  
    41  	c := crd.NewCRD(clientset)
    42  	resources, err := c.ListAPIResources(metav1.GroupVersion{
    43  		Group:   "monitoring.coreos.com",
    44  		Version: "v1",
    45  	})
    46  	if err != nil {
    47  		log.Fatal(err)
    48  	}
    49  	for _, resource := range resources {
    50  		fmt.Println(resource.Name)
    51  	}
    52  	// Output:
    53  	// alertmanagers
    54  	// servicemonitors
    55  	// prometheuses
    56  	// prometheusrules
    57  	// podmonitors
    58  
    59  	has, err := c.HasAPIResource(metav1.GroupVersion{
    60  		Group:   "monitoring.coreos.com",
    61  		Version: "v1",
    62  	}, "servicemonitors")
    63  	if err != nil {
    64  		log.Fatal(err)
    65  	}
    66  	fmt.Printf("%t\n", has)
    67  	// Output: true
    68  }
    69  
    70  
    71  func homeDir() string {
    72  	if h := os.Getenv("HOME"); h != "" {
    73  		return h
    74  	}
    75  	return os.Getenv("USERPROFILE") // windows
    76  }
    77  ```