in pkg/providers/controller.go [220:338]
func (c *Controller) initSharedInformers() *providertypes.ListerInformer {
kubeFactory := c.kubeClient.NewSharedIndexInformerFactory()
apisixFactory := c.kubeClient.NewAPISIXSharedIndexInformerFactory()
var (
ingressInformer cache.SharedIndexInformer
ingressListerV1 networkingv1.IngressLister
ingressListerV1beta1 networkingv1beta1.IngressLister
)
var (
apisixUpstreamInformer cache.SharedIndexInformer
apisixRouteInformer cache.SharedIndexInformer
apisixPluginConfigInformer cache.SharedIndexInformer
apisixConsumerInformer cache.SharedIndexInformer
apisixTlsInformer cache.SharedIndexInformer
apisixClusterConfigInformer cache.SharedIndexInformer
ApisixGlobalRuleInformer cache.SharedIndexInformer
apisixRouteListerV2 v2.ApisixRouteLister
apisixUpstreamListerV2 v2.ApisixUpstreamLister
apisixTlsListerV2 v2.ApisixTlsLister
apisixClusterConfigListerV2 v2.ApisixClusterConfigLister
apisixConsumerListerV2 v2.ApisixConsumerLister
apisixPluginConfigListerV2 v2.ApisixPluginConfigLister
ApisixGlobalRuleListerV2 v2.ApisixGlobalRuleLister
)
switch c.cfg.Kubernetes.APIVersion {
case config.ApisixV2:
apisixRouteInformer = apisixFactory.Apisix().V2().ApisixRoutes().Informer()
apisixTlsInformer = apisixFactory.Apisix().V2().ApisixTlses().Informer()
apisixClusterConfigInformer = apisixFactory.Apisix().V2().ApisixClusterConfigs().Informer()
apisixConsumerInformer = apisixFactory.Apisix().V2().ApisixConsumers().Informer()
apisixPluginConfigInformer = apisixFactory.Apisix().V2().ApisixPluginConfigs().Informer()
apisixUpstreamInformer = apisixFactory.Apisix().V2().ApisixUpstreams().Informer()
ApisixGlobalRuleInformer = apisixFactory.Apisix().V2().ApisixGlobalRules().Informer()
apisixRouteListerV2 = apisixFactory.Apisix().V2().ApisixRoutes().Lister()
apisixUpstreamListerV2 = apisixFactory.Apisix().V2().ApisixUpstreams().Lister()
apisixTlsListerV2 = apisixFactory.Apisix().V2().ApisixTlses().Lister()
apisixClusterConfigListerV2 = apisixFactory.Apisix().V2().ApisixClusterConfigs().Lister()
apisixConsumerListerV2 = apisixFactory.Apisix().V2().ApisixConsumers().Lister()
apisixPluginConfigListerV2 = apisixFactory.Apisix().V2().ApisixPluginConfigs().Lister()
ApisixGlobalRuleListerV2 = apisixFactory.Apisix().V2().ApisixGlobalRules().Lister()
default:
panic(fmt.Errorf("unsupported API version %v", c.cfg.Kubernetes.APIVersion))
}
apisixUpstreamLister := kube.NewApisixUpstreamLister(apisixUpstreamListerV2)
apisixRouteLister := kube.NewApisixRouteLister(apisixRouteListerV2)
apisixTlsLister := kube.NewApisixTlsLister(apisixTlsListerV2)
apisixClusterConfigLister := kube.NewApisixClusterConfigLister(apisixClusterConfigListerV2)
apisixConsumerLister := kube.NewApisixConsumerLister(apisixConsumerListerV2)
apisixPluginConfigLister := kube.NewApisixPluginConfigLister(apisixPluginConfigListerV2)
ApisixGlobalRuleLister := kube.NewApisixGlobalRuleLister(c.cfg.Kubernetes.APIVersion, ApisixGlobalRuleListerV2)
epLister, epInformer := kube.NewEndpointListerAndInformer(kubeFactory, c.cfg.Kubernetes.WatchEndpointSlices)
svcInformer := kubeFactory.Core().V1().Services().Informer()
svcLister := kubeFactory.Core().V1().Services().Lister()
podInformer := kubeFactory.Core().V1().Pods().Informer()
podLister := kubeFactory.Core().V1().Pods().Lister()
secretInformer := kubeFactory.Core().V1().Secrets().Informer()
secretLister := kubeFactory.Core().V1().Secrets().Lister()
configmapInformer := kubeFactory.Core().V1().ConfigMaps().Informer()
configmapLister := kubeFactory.Core().V1().ConfigMaps().Lister()
switch c.cfg.Kubernetes.IngressVersion {
case config.IngressNetworkingV1beta1:
ingressInformer = kubeFactory.Networking().V1beta1().Ingresses().Informer()
ingressListerV1beta1 = kubeFactory.Networking().V1beta1().Ingresses().Lister()
default:
ingressInformer = kubeFactory.Networking().V1().Ingresses().Informer()
ingressListerV1 = kubeFactory.Networking().V1().Ingresses().Lister()
}
ingressLister := kube.NewIngressLister(ingressListerV1, ingressListerV1beta1)
listerInformer := &providertypes.ListerInformer{
ApisixFactory: apisixFactory,
KubeFactory: kubeFactory,
EpLister: epLister,
EpInformer: epInformer,
SvcLister: svcLister,
SvcInformer: svcInformer,
SecretLister: secretLister,
SecretInformer: secretInformer,
PodLister: podLister,
PodInformer: podInformer,
ConfigMapInformer: configmapInformer,
ConfigMapLister: configmapLister,
IngressInformer: ingressInformer,
IngressLister: ingressLister,
ApisixUpstreamLister: apisixUpstreamLister,
ApisixRouteLister: apisixRouteLister,
ApisixConsumerLister: apisixConsumerLister,
ApisixTlsLister: apisixTlsLister,
ApisixPluginConfigLister: apisixPluginConfigLister,
ApisixClusterConfigLister: apisixClusterConfigLister,
ApisixGlobalRuleLister: ApisixGlobalRuleLister,
ApisixUpstreamInformer: apisixUpstreamInformer,
ApisixPluginConfigInformer: apisixPluginConfigInformer,
ApisixRouteInformer: apisixRouteInformer,
ApisixClusterConfigInformer: apisixClusterConfigInformer,
ApisixConsumerInformer: apisixConsumerInformer,
ApisixTlsInformer: apisixTlsInformer,
ApisixGlobalRuleInformer: ApisixGlobalRuleInformer,
}
return listerInformer
}