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,10 +231,14 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, gvr := range k8sGVRs {
|
for _, gvr := range k8sGVRs {
|
||||||
_, err := informerFactory.ForResource(gvr)
|
if !isResourceExists(gvr) {
|
||||||
if err != nil {
|
klog.Warningf("resource %s not exists in the cluster", gvr)
|
||||||
klog.Errorf("cannot create informer for %s", gvr)
|
} else {
|
||||||
return err
|
_, 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 {
|
for _, gvr := range s2iGVRs {
|
||||||
_, err := s2iInformerFactory.ForResource(gvr)
|
if !isResourceExists(gvr) {
|
||||||
if err != nil {
|
klog.Warningf("resource %s not exists in the cluster", gvr)
|
||||||
return err
|
} else {
|
||||||
|
_, err := s2iInformerFactory.ForResource(gvr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,9 +278,13 @@ func WaitForResourceSync(stopCh <-chan struct{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, gvr := range ksGVRs {
|
for _, gvr := range ksGVRs {
|
||||||
_, err := ksInformerFactory.ForResource(gvr)
|
if !isResourceExists(gvr) {
|
||||||
if err != nil {
|
klog.Warningf("resource %s not exists in the cluster", gvr)
|
||||||
return err
|
} else {
|
||||||
|
_, err := ksInformerFactory.ForResource(gvr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
@@ -33,11 +37,12 @@ func NewKubernetesClientOrDie(options *KubernetesOptions) *KubernetesClient {
|
|||||||
config.Burst = options.Burst
|
config.Burst = options.Burst
|
||||||
|
|
||||||
k := &KubernetesClient{
|
k := &KubernetesClient{
|
||||||
k8s: kubernetes.NewForConfigOrDie(config),
|
k8s: kubernetes.NewForConfigOrDie(config),
|
||||||
ks: kubesphere.NewForConfigOrDie(config),
|
discoveryClient: discovery.NewDiscoveryClientForConfigOrDie(config),
|
||||||
s2i: s2i.NewForConfigOrDie(config),
|
ks: kubesphere.NewForConfigOrDie(config),
|
||||||
master: config.Host,
|
s2i: s2i.NewForConfigOrDie(config),
|
||||||
config: config,
|
master: config.Host,
|
||||||
|
config: config,
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.Master != "" {
|
if options.Master != "" {
|
||||||
@@ -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