in pkg/noderesourcetopology/plugin.go [121:163]
func New(ctx context.Context, args runtime.Object, handle framework.Handle) (framework.Plugin, error) {
lh := klog.FromContext(ctx)
lh.V(5).Info("creating new noderesourcetopology plugin")
tcfg, ok := args.(*apiconfig.NodeResourceTopologyMatchArgs)
if !ok {
return nil, fmt.Errorf("want args to be of type NodeResourceTopologyMatchArgs, got %T", args)
}
if err := validation.ValidateNodeResourceTopologyMatchArgs(nil, tcfg); err != nil {
return nil, err
}
nrtCache, err := initNodeTopologyInformer(ctx, lh, tcfg, handle)
if err != nil {
lh.Error(err, "cannot create clientset for NodeTopologyResource", "kubeConfig", handle.KubeConfig())
return nil, err
}
resToWeightMap := make(resourceToWeightMap)
for _, resource := range tcfg.ScoringStrategy.Resources {
resToWeightMap[v1.ResourceName(resource.Name)] = resource.Weight
}
// This is not strictly needed, but we do it here and we carry `scoreStrategyFunc` around
// to be able to do as much parameter validation as possible here in this function.
// We perform only the NRT-object-specific validation in `Filter()` and `Score()`
// because we can't help it, being the earliest point in time on which we have access
// to NRT instances.
strategy, err := getScoringStrategyFunction(tcfg.ScoringStrategy.Type)
if err != nil {
return nil, err
}
topologyMatch := &TopologyMatch{
resourceToWeightMap: resToWeightMap,
nrtCache: nrtCache,
scoreStrategyFunc: strategy,
scoreStrategyType: tcfg.ScoringStrategy.Type,
}
return topologyMatch, nil
}