提交 d2b1bf4b 编写于 作者: J Jeff 提交者: zryfish

skip informer creating when corresponding crd not exists

上级 7ad77c32
......@@ -177,6 +177,25 @@ func CreateClientSet(conf *apiserverconfig.Config, stopCh <-chan struct{}) error
func WaitForResourceSync(stopCh <-chan struct{}) error {
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()
// resources we have to create informer first
......@@ -212,10 +231,14 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
}
for _, gvr := range k8sGVRs {
_, err := informerFactory.ForResource(gvr)
if err != nil {
klog.Errorf("cannot create informer for %s", gvr)
return err
if !isResourceExists(gvr) {
klog.Warningf("resource %s not exists in the cluster", gvr)
} else {
_, err := informerFactory.ForResource(gvr)
if err != nil {
klog.Errorf("cannot create informer for %s", gvr)
return err
}
}
}
......@@ -231,9 +254,13 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
}
for _, gvr := range s2iGVRs {
_, err := s2iInformerFactory.ForResource(gvr)
if err != nil {
return err
if !isResourceExists(gvr) {
klog.Warningf("resource %s not exists in the cluster", gvr)
} else {
_, err := s2iInformerFactory.ForResource(gvr)
if err != nil {
return err
}
}
}
......@@ -251,9 +278,13 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
}
for _, gvr := range ksGVRs {
_, err := ksInformerFactory.ForResource(gvr)
if err != nil {
return err
if !isResourceExists(gvr) {
klog.Warningf("resource %s not exists in the cluster", gvr)
} else {
_, err := ksInformerFactory.ForResource(gvr)
if err != nil {
return err
}
}
}
......
......@@ -2,6 +2,7 @@ package k8s
import (
s2i "github.com/kubesphere/s2ioperator/pkg/client/clientset/versioned"
"k8s.io/client-go/discovery"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
......@@ -12,6 +13,9 @@ type KubernetesClient struct {
// kubernetes client interface
k8s *kubernetes.Clientset
// discovery client
discoveryClient *discovery.DiscoveryClient
// generated clientset
ks *kubesphere.Clientset
......@@ -33,11 +37,12 @@ func NewKubernetesClientOrDie(options *KubernetesOptions) *KubernetesClient {
config.Burst = options.Burst
k := &KubernetesClient{
k8s: kubernetes.NewForConfigOrDie(config),
ks: kubesphere.NewForConfigOrDie(config),
s2i: s2i.NewForConfigOrDie(config),
master: config.Host,
config: config,
k8s: kubernetes.NewForConfigOrDie(config),
discoveryClient: discovery.NewDiscoveryClientForConfigOrDie(config),
ks: kubesphere.NewForConfigOrDie(config),
s2i: s2i.NewForConfigOrDie(config),
master: config.Host,
config: config,
}
if options.Master != "" {
......@@ -83,6 +88,10 @@ func (k *KubernetesClient) Kubernetes() kubernetes.Interface {
return k.k8s
}
func (k *KubernetesClient) Discovery() discovery.DiscoveryInterface {
return k.discoveryClient
}
func (k *KubernetesClient) KubeSphere() kubesphere.Interface {
return k.ks
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册