/
ui.go
84 lines (69 loc) · 3.12 KB
/
ui.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package ui
import (
"time"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
"github.com/kyma-project/kyma/common/microfrontend-client/pkg/apis/ui/v1alpha1"
"github.com/kyma-project/kyma/components/console-backend-service/pkg/client/clientset/versioned"
"github.com/kyma-project/kyma/components/console-backend-service/pkg/client/informers/externalversions"
"github.com/kyma-project/kyma/components/console-backend-service/pkg/dynamic/dynamicinformer"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
)
type Container struct {
Resolver *Resolver
BackendModuleInformer cache.SharedIndexInformer
MicroFrontendInformer cache.SharedIndexInformer
ClusterMicroFrontendInformer cache.SharedIndexInformer
}
type Resolver struct {
*backendModuleResolver
*microFrontendResolver
*clusterMicroFrontendResolver
informerFactory externalversions.SharedInformerFactory
microFrontendInformerFactory dynamicinformer.DynamicSharedInformerFactory
}
func New(restConfig *rest.Config, informerResyncPeriod time.Duration) (*Container, error) {
clientset, err := versioned.NewForConfig(restConfig)
if err != nil {
return nil, err
}
microFrontendClientset, err := dynamic.NewForConfig(restConfig)
if err != nil {
return nil, err
}
informerFactory := externalversions.NewSharedInformerFactory(clientset, informerResyncPeriod)
backendModuleInformer := informerFactory.Ui().V1alpha1().BackendModules().Informer()
backendModuleService := newBackendModuleService(backendModuleInformer)
microFrontendInformerFactory := dynamicinformer.NewDynamicSharedInformerFactory(microFrontendClientset, informerResyncPeriod)
microFrontendInformer := microFrontendInformerFactory.ForResource(schema.GroupVersionResource{
Version: v1alpha1.SchemeGroupVersion.Version,
Group: v1alpha1.SchemeGroupVersion.Group,
Resource: "microfrontends",
}).Informer()
clusterMicroFrontendInformer := microFrontendInformerFactory.ForResource(schema.GroupVersionResource{
Version: v1alpha1.SchemeGroupVersion.Version,
Group: v1alpha1.SchemeGroupVersion.Group,
Resource: "clustermicrofrontends",
}).Informer()
microFrontendService := newMicroFrontendService(microFrontendInformer)
clusterMicroFrontendService := newClusterMicroFrontendService(clusterMicroFrontendInformer)
return &Container{
Resolver: &Resolver{
backendModuleResolver: newBackendModuleResolver(backendModuleService),
informerFactory: informerFactory,
microFrontendResolver: newMicroFrontendResolver(microFrontendService),
clusterMicroFrontendResolver: newClusterMicroFrontendResolver(clusterMicroFrontendService),
microFrontendInformerFactory: microFrontendInformerFactory,
},
BackendModuleInformer: backendModuleInformer,
MicroFrontendInformer: microFrontendInformer,
ClusterMicroFrontendInformer: clusterMicroFrontendInformer,
}, nil
}
func (r *Resolver) WaitForCacheSync(stopCh <-chan struct{}) {
r.informerFactory.Start(stopCh)
r.informerFactory.WaitForCacheSync(stopCh)
r.microFrontendInformerFactory.Start(stopCh)
r.microFrontendInformerFactory.WaitForCacheSync(stopCh)
}