forked from kyma-project/kyma
/
k8s.go
60 lines (49 loc) · 2.19 KB
/
k8s.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
package k8s
import (
"time"
"github.com/kyma-project/kyma/components/remote-environment-broker/pkg/apis/remoteenvironment/v1alpha1"
"github.com/pkg/errors"
"k8s.io/client-go/informers"
k8sClientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/client-go/rest"
)
type RemoteEnvironmentLister interface {
ListInEnvironment(environment string) ([]*v1alpha1.RemoteEnvironment, error)
ListNamespacesFor(reName string) ([]string, error)
}
type Resolver struct {
*environmentResolver
*secretResolver
*deploymentResolver
*resourceQuotaResolver
*limitRangeResolver
informerFactory informers.SharedInformerFactory
}
func New(restConfig *rest.Config, remoteEnvironmentLister RemoteEnvironmentLister, informerResyncPeriod time.Duration, serviceBindingUsageLister ServiceBindingUsageLister, serviceBindingGetter ServiceBindingGetter) (*Resolver, error) {
client, err := v1.NewForConfig(restConfig)
if err != nil {
return nil, errors.Wrap(err, "while creating K8S Client")
}
clientset, err := k8sClientset.NewForConfig(restConfig)
if err != nil {
return nil, errors.Wrap(err, "while creating K8S Client")
}
informerFactory := informers.NewSharedInformerFactory(clientset, informerResyncPeriod)
environmentService := newEnvironmentService(client.Namespaces(), remoteEnvironmentLister)
deploymentService := newDeploymentService(informerFactory.Apps().V1beta2().Deployments().Informer())
limitRangeService := newLimitRangeService(informerFactory.Core().V1().LimitRanges().Informer())
resourceQuotaService := newResourceQuotaService(informerFactory.Core().V1().ResourceQuotas().Informer())
return &Resolver{
environmentResolver: newEnvironmentResolver(environmentService),
secretResolver: newSecretResolver(client),
deploymentResolver: newDeploymentResolver(deploymentService, serviceBindingUsageLister, serviceBindingGetter),
limitRangeResolver: newLimitRangeResolver(limitRangeService),
resourceQuotaResolver: newResourceQuotaResolver(resourceQuotaService),
informerFactory: informerFactory,
}, nil
}
func (r *Resolver) WaitForCacheSync(stopCh <-chan struct{}) {
r.informerFactory.Start(stopCh)
r.informerFactory.WaitForCacheSync(stopCh)
}