skip informer creating when corresponding crd not exists
This commit is contained in:
@@ -177,6 +177,25 @@ func CreateClientSet(conf *apiserverconfig.Config, stopCh <-chan struct{}) error
|
|||||||
func WaitForResourceSync(stopCh <-chan struct{}) error {
|
func WaitForResourceSync(stopCh <-chan struct{}) error {
|
||||||
klog.V(0).Info("Start cache objects")
|
klog.V(0).Info("Start cache objects")
|
||||||
|
|
||||||
|
discoveryClient := client.ClientSets().K8s().Discovery()
|
||||||
|
apiResourcesList, err := discoveryClient.ServerResources()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
isResourceExists := func(resource schema.GroupVersionResource) bool {
|
||||||
|
for _, apiResource := range apiResourcesList {
|
||||||
|
if apiResource.GroupVersion == resource.GroupVersion().String() {
|
||||||
|
for _, rsc := range apiResource.APIResources {
|
||||||
|
if rsc.Name == resource.Resource {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
informerFactory := informers.SharedInformerFactory()
|
informerFactory := informers.SharedInformerFactory()
|
||||||
|
|
||||||
// resources we have to create informer first
|
// resources we have to create informer first
|
||||||
@@ -212,12 +231,16 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, gvr := range k8sGVRs {
|
for _, gvr := range k8sGVRs {
|
||||||
|
if !isResourceExists(gvr) {
|
||||||
|
klog.Warningf("resource %s not exists in the cluster", gvr)
|
||||||
|
} else {
|
||||||
_, err := informerFactory.ForResource(gvr)
|
_, err := informerFactory.ForResource(gvr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("cannot create informer for %s", gvr)
|
klog.Errorf("cannot create informer for %s", gvr)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
informerFactory.Start(stopCh)
|
informerFactory.Start(stopCh)
|
||||||
informerFactory.WaitForCacheSync(stopCh)
|
informerFactory.WaitForCacheSync(stopCh)
|
||||||
@@ -231,11 +254,15 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, gvr := range s2iGVRs {
|
for _, gvr := range s2iGVRs {
|
||||||
|
if !isResourceExists(gvr) {
|
||||||
|
klog.Warningf("resource %s not exists in the cluster", gvr)
|
||||||
|
} else {
|
||||||
_, err := s2iInformerFactory.ForResource(gvr)
|
_, err := s2iInformerFactory.ForResource(gvr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
s2iInformerFactory.Start(stopCh)
|
s2iInformerFactory.Start(stopCh)
|
||||||
s2iInformerFactory.WaitForCacheSync(stopCh)
|
s2iInformerFactory.WaitForCacheSync(stopCh)
|
||||||
@@ -251,11 +278,15 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, gvr := range ksGVRs {
|
for _, gvr := range ksGVRs {
|
||||||
|
if !isResourceExists(gvr) {
|
||||||
|
klog.Warningf("resource %s not exists in the cluster", gvr)
|
||||||
|
} else {
|
||||||
_, err := ksInformerFactory.ForResource(gvr)
|
_, err := ksInformerFactory.ForResource(gvr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ksInformerFactory.Start(stopCh)
|
ksInformerFactory.Start(stopCh)
|
||||||
ksInformerFactory.WaitForCacheSync(stopCh)
|
ksInformerFactory.WaitForCacheSync(stopCh)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package k8s
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
s2i "github.com/kubesphere/s2ioperator/pkg/client/clientset/versioned"
|
s2i "github.com/kubesphere/s2ioperator/pkg/client/clientset/versioned"
|
||||||
|
"k8s.io/client-go/discovery"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
@@ -12,6 +13,9 @@ type KubernetesClient struct {
|
|||||||
// kubernetes client interface
|
// kubernetes client interface
|
||||||
k8s *kubernetes.Clientset
|
k8s *kubernetes.Clientset
|
||||||
|
|
||||||
|
// discovery client
|
||||||
|
discoveryClient *discovery.DiscoveryClient
|
||||||
|
|
||||||
// generated clientset
|
// generated clientset
|
||||||
ks *kubesphere.Clientset
|
ks *kubesphere.Clientset
|
||||||
|
|
||||||
@@ -34,6 +38,7 @@ func NewKubernetesClientOrDie(options *KubernetesOptions) *KubernetesClient {
|
|||||||
|
|
||||||
k := &KubernetesClient{
|
k := &KubernetesClient{
|
||||||
k8s: kubernetes.NewForConfigOrDie(config),
|
k8s: kubernetes.NewForConfigOrDie(config),
|
||||||
|
discoveryClient: discovery.NewDiscoveryClientForConfigOrDie(config),
|
||||||
ks: kubesphere.NewForConfigOrDie(config),
|
ks: kubesphere.NewForConfigOrDie(config),
|
||||||
s2i: s2i.NewForConfigOrDie(config),
|
s2i: s2i.NewForConfigOrDie(config),
|
||||||
master: config.Host,
|
master: config.Host,
|
||||||
@@ -83,6 +88,10 @@ func (k *KubernetesClient) Kubernetes() kubernetes.Interface {
|
|||||||
return k.k8s
|
return k.k8s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (k *KubernetesClient) Discovery() discovery.DiscoveryInterface {
|
||||||
|
return k.discoveryClient
|
||||||
|
}
|
||||||
|
|
||||||
func (k *KubernetesClient) KubeSphere() kubesphere.Interface {
|
func (k *KubernetesClient) KubeSphere() kubesphere.Interface {
|
||||||
return k.ks
|
return k.ks
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user