func()

in pkg/cloud_provider/clientset/clientset.go [63:108]


func (c *Clientset) ConfigureNodeLister(nodeName string) {
	trim := func(obj interface{}) (interface{}, error) {
		if accessor, err := meta.Accessor(obj); err == nil {
			if accessor.GetManagedFields() != nil {
				accessor.SetManagedFields(nil)
			}
		}

		// We are filtering only for relevant Node annotations to optimize memory usage.
		// Relevant info is for NodePublishVolume calls:
		// https://github.com/GoogleCloudPlatform/gcs-fuse-csi-driver/blob/547cab9a9aea4cdbda581885880020fb9266dc03/pkg/csi_driver/node.go#L85
		nodeObj, ok := obj.(*corev1.Node)
		if !ok {
			return obj, nil
		}

		newLabels := map[string]string{}
		isGkeMetaDataServerEnabled, ok := nodeObj.ObjectMeta.Labels[GkeMetaDataServerKey]
		if ok {
			newLabels[GkeMetaDataServerKey] = isGkeMetaDataServerEnabled
		}

		nodeObj.Spec = corev1.NodeSpec{}
		nodeObj.Status = corev1.NodeStatus{}
		nodeObj.ObjectMeta.Annotations = nil
		nodeObj.ObjectMeta.Labels = newLabels

		return obj, nil
	}

	informerFactory := informers.NewSharedInformerFactoryWithOptions(
		c.k8sClients,
		time.Duration(c.informerResyncDurationSec)*time.Second,
		informers.WithTweakListOptions(func(options *metav1.ListOptions) {
			options.FieldSelector = "metadata.name=" + nodeName
		}),
		informers.WithTransform(trim),
	)
	nodeLister := informerFactory.Core().V1().Nodes().Lister()

	ctx := context.Background()
	informerFactory.Start(ctx.Done())
	informerFactory.WaitForCacheSync(ctx.Done())

	c.nodeLister = nodeLister
}