in pkg/admission/admission_controller.go [157:218]
func (c *AdmissionController) processPod(req *admissionv1.AdmissionRequest, namespace string) *admissionv1.AdmissionResponse {
var patch []common.PatchOperation
var uid = string(req.UID)
var pod v1.Pod
if err := json.Unmarshal(req.Object.Raw, &pod); err != nil {
log.Log(log.Admission).Error("unmarshal failed", zap.Error(err))
return admissionResponseBuilder(uid, false, err.Error(), nil)
}
userName := req.UserInfo.Username
groups := req.UserInfo.Groups
failureResponse, userInfoSet := c.checkUserInfoAnnotation(func() (string, bool) {
a, ok := pod.Annotations[common.UserInfoAnnotation]
return a, ok
}, userName, groups, uid)
if failureResponse != nil {
return failureResponse
}
if !userInfoSet && !c.conf.GetBypassAuth() {
log.Log(log.Admission).Info("setting user info metadata on pod")
patchOp, err := c.annotationHandler.GetPatchForPod(pod.Annotations, userName, groups)
if err != nil {
return admissionResponseBuilder(uid, false, err.Error(), nil)
}
patch = append(patch, *patchOp)
}
if labelAppValue := utils.GetPodLabelValue(&pod, constants.LabelApp); labelAppValue != "" {
if labelAppValue == yunikornPod {
log.Log(log.Admission).Info("ignore yunikorn pod")
return admissionResponseBuilder(uid, true, "", nil)
}
}
if !c.shouldProcessNamespace(namespace) {
log.Log(log.Admission).Info("bypassing namespace", zap.String("namespace", namespace))
return admissionResponseBuilder(uid, true, "", nil)
}
patch = updateSchedulerName(patch)
if c.shouldLabelNamespace(namespace) {
patch = c.updateLabels(namespace, &pod, patch)
patch = c.updatePreemptionInfo(&pod, patch)
} else {
patch = disableYuniKorn(namespace, &pod, patch)
}
log.Log(log.Admission).Info("generated patch",
zap.String("namespace", namespace),
zap.String("podName", pod.Name),
zap.String("generateName", pod.GenerateName),
zap.Any("patch", patch))
patchBytes, err := json.Marshal(patch)
if err != nil {
log.Log(log.Admission).Error("failed to marshal patch", zap.Error(err))
return admissionResponseBuilder(uid, false, err.Error(), nil)
}
return admissionResponseBuilder(uid, true, "", patchBytes)
}