From 09bd2c95ffaf08760751edaa4d74f15e88a0ad6b Mon Sep 17 00:00:00 2001 From: shivkumar dudhani Date: Thu, 22 Aug 2019 11:18:13 -0700 Subject: [PATCH] CRD check --- main.go | 5 +++++ pkg/utils/util.go | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/main.go b/main.go index c95261538d..7a664b00e4 100644 --- a/main.go +++ b/main.go @@ -60,6 +60,11 @@ func main() { glog.Fatalf("Error creating client: %v\n", err) } + // CRD CHECK + // - verify if the CRD for Policy & PolicyViolation are avialalbe + if !utils.CRDInstalled(client.DiscoveryClient) { + glog.Fatalf("Required CRDs unavailable") + } // KUBERNETES CLIENT kubeClient, err := utils.NewKubeClient(clientConfig) if err != nil { diff --git a/pkg/utils/util.go b/pkg/utils/util.go index eb548c328d..db62308636 100644 --- a/pkg/utils/util.go +++ b/pkg/utils/util.go @@ -1,11 +1,16 @@ package utils import ( + "reflect" "regexp" "strings" + "github.com/golang/glog" + "github.com/minio/minio/pkg/wildcard" + client "github.com/nirmata/kyverno/pkg/dclient" "k8s.io/api/admission/v1beta1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" ) @@ -94,3 +99,20 @@ func Btoi(b bool) int { } return 0 } + +//CRDInstalled to check if the CRD is installed or not +func CRDInstalled(discovery client.IDiscovery) bool { + check := func(kind string) bool { + gvr := discovery.GetGVRFromKind(kind) + if reflect.DeepEqual(gvr, (schema.GroupVersionResource{})) { + glog.Errorf("%s CRD not installed", kind) + return false + } + glog.Infof("CRD %s found ", kind) + return true + } + if !check("Policy") || !check("PolicyViolation") { + return false + } + return true +}