in pkg/providers/imagefamily/resolver.go [91:146]
func (r *defaultResolver) Resolve(ctx context.Context, nodeClass *v1alpha2.AKSNodeClass, nodeClaim *karpv1.NodeClaim, instanceType *cloudprovider.InstanceType,
staticParameters *template.StaticParameters) (*template.Parameters, error) {
imageFamily := getImageFamily(nodeClass.Spec.ImageFamily, staticParameters)
imageDistro, imageID, err := r.imageProvider.Get(ctx, nodeClass, instanceType, imageFamily)
if err != nil {
metrics.ImageSelectionErrorCount.WithLabelValues(imageFamily.Name()).Inc()
return nil, err
}
log.FromContext(ctx).Info(fmt.Sprintf("Resolved image %s for instance type %s", imageID, instanceType.Name))
generalTaints := nodeClaim.Spec.Taints
startupTaints := nodeClaim.Spec.StartupTaints
allTaints := lo.Flatten([][]corev1.Taint{
generalTaints,
startupTaints,
})
// Ensure UnregisteredNoExecuteTaint is present
if _, found := lo.Find(allTaints, func(t corev1.Taint) bool { // Allow UnregisteredNoExecuteTaint to be in non-startup taints(?)
return t.MatchTaint(&karpv1.UnregisteredNoExecuteTaint)
}); !found {
startupTaints = append(startupTaints, karpv1.UnregisteredNoExecuteTaint)
allTaints = append(allTaints, karpv1.UnregisteredNoExecuteTaint)
}
storageProfile := "ManagedDisks"
if useEphemeralDisk(instanceType, nodeClass) {
storageProfile = "Ephemeral"
}
template := &template.Parameters{
StaticParameters: staticParameters,
ScriptlessCustomData: imageFamily.ScriptlessCustomData(
prepareKubeletConfiguration(ctx, instanceType, nodeClass),
allTaints,
staticParameters.Labels,
staticParameters.CABundle,
instanceType,
),
CustomScriptsNodeBootstrapping: imageFamily.CustomScriptsNodeBootstrapping(
prepareKubeletConfiguration(ctx, instanceType, nodeClass),
generalTaints,
startupTaints,
staticParameters.Labels,
instanceType,
imageDistro,
storageProfile,
),
ImageID: imageID,
StorageProfile: storageProfile,
IsWindows: false, // TODO(Windows)
}
return template, nil
}