diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go index 0acaa5de0f1..958f5a1733b 100644 --- a/pkg/apis/core/types.go +++ b/pkg/apis/core/types.go @@ -23,6 +23,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/klog" +// "runtime/debug" ) const ( @@ -2927,8 +2929,12 @@ type PodSpec struct { } func (ps *PodSpec) Workloads() []CommonInfo { - if len(ps.WorkloadInfo) == 0 { + klog.Infof("debug workload called. stack:") +// debug.PrintStack() + +// if len(ps.WorkloadInfo) == 0 { if ps.VirtualMachine != nil { + klog.Infof("debug vm resource: %v", ps.VirtualMachine.Resources) ps.WorkloadInfo = make([]CommonInfo, 1) ps.WorkloadInfo[0].Name = ps.VirtualMachine.Name ps.WorkloadInfo[0].Image = ps.VirtualMachine.Image @@ -2940,6 +2946,7 @@ func (ps *PodSpec) Workloads() []CommonInfo { } else { ps.WorkloadInfo = make([]CommonInfo, len(ps.Containers)) for i := range ps.Containers { + klog.Infof("debug container resource: %v", ps.Containers[i].Resources) ps.WorkloadInfo[i].Name = ps.Containers[i].Name ps.WorkloadInfo[i].Image = ps.Containers[i].Image ps.WorkloadInfo[i].ImagePullPolicy = ps.Containers[i].ImagePullPolicy @@ -2949,11 +2956,12 @@ func (ps *PodSpec) Workloads() []CommonInfo { ps.WorkloadInfo[i].VolumeMounts = ps.Containers[i].VolumeMounts } } - } +//} return ps.WorkloadInfo } func (ps *PodSpec) SetWorkloads() { +klog.Infof("debug SetWorkloads called") // Update mutable fields if len(ps.WorkloadInfo) != 0 { if ps.VirtualMachine != nil { diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index adfe4873783..f63f1896765 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -3709,6 +3709,9 @@ func ValidatePodUpdate(newPod, oldPod *core.Pod) field.ErrorList { allErrs = append(allErrs, ValidatePodSpecificAnnotationUpdates(newPod, oldPod, fldPath.Child("annotations"))...) specPath := field.NewPath("spec") + klog.V(4).Infof("debug: oldpod: spec: %v, workloadInfo: %v", oldPod.Spec, oldPod.Spec.WorkloadInfo) + klog.V(4).Infof("debug: newpod: spec: %v, workloadInfo: %v", newPod.Spec, newPod.Spec.WorkloadInfo) + // validate updateable fields: // 1. spec.containers[*].image // 2. spec.initContainers[*].image @@ -3847,6 +3850,9 @@ func ValidatePodUpdate(newPod, oldPod *core.Pod) field.ErrorList { // munge spec.nics mungedPod.Spec.Nics = oldPod.Spec.Nics + // munge spec.workloadinfo + mungedPod.Spec.WorkloadInfo = oldPod.Spec.WorkloadInfo + // Allow only additions to tolerations updates. mungedPod.Spec.Tolerations = oldPod.Spec.Tolerations allErrs = append(allErrs, validateOnlyAddedTolerations(newPod.Spec.Tolerations, oldPod.Spec.Tolerations, specPath.Child("tolerations"))...) diff --git a/pkg/registry/core/pod/strategy.go b/pkg/registry/core/pod/strategy.go index 65efec90629..6e5ec0cdb0e 100644 --- a/pkg/registry/core/pod/strategy.go +++ b/pkg/registry/core/pod/strategy.go @@ -26,6 +26,7 @@ import ( "strconv" "strings" "time" + "k8s.io/klog" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -168,6 +169,8 @@ var StatusStrategy = podStatusStrategy{Strategy} func (podStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { newPod := obj.(*api.Pod) oldPod := old.(*api.Pod) + klog.Infof("debug5 newpod %v, spec: %v", newPod.Name, newPod.Spec) + newPod.Spec = oldPod.Spec newPod.DeletionTimestamp = nil diff --git a/plugin/pkg/admission/podresourceallocation/admission.go b/plugin/pkg/admission/podresourceallocation/admission.go index 25bb1adb777..8fb16db99c4 100644 --- a/plugin/pkg/admission/podresourceallocation/admission.go +++ b/plugin/pkg/admission/podresourceallocation/admission.go @@ -72,11 +72,15 @@ func (p *Plugin) Admit(attributes admission.Attributes, o admission.ObjectInterf return apierrors.NewBadRequest("Resource was marked with kind Pod but was unable to be converted") } + klog.V(4).Infof("debug3: newpod %v: spec: %v, workloadInfo: %v", pod.Name, pod.Spec, pod.Spec.WorkloadInfo) + op := attributes.GetOperation() // mutation to set defaults is done in admission plugin rather than in defaults // because doing it here allows us to support create/update from older client versions switch op { case admission.Create: + klog.V(4).Infof("debug2: newpod %v: spec: %v, workloadInfo: %v", pod.Name, pod.Spec, pod.Spec.WorkloadInfo) + podQoS := qos.GetPodQOS(pod) for i := range pod.Spec.Workloads() { // set container resize policy to nil for best-effort class @@ -117,8 +121,8 @@ func (p *Plugin) Admit(attributes admission.Attributes, o admission.ObjectInterf case admission.Update: oldPod, ok := attributes.GetOldObject().(*api.Pod) - klog.V(4).Infof("debug: oldpod: spec: %v, workloadInfo: %v", oldPod.Spec, oldPod.Spec.WorkloadInfo) - klog.V(4).Infof("debug: newpod: spec: %v, workloadInfo: %v", pod.Spec, pod.Spec.WorkloadInfo) + //klog.V(4).Infof("debug: oldpod %v: spec: %v, workloadInfo: %v", oldPod.Name, oldPod.Spec, oldPod.Spec.WorkloadInfo) + //klog.V(4).Infof("debug: newpod %v: spec: %v, workloadInfo: %v", pod.Name, pod.Spec, pod.Spec.WorkloadInfo) if !ok { return apierrors.NewBadRequest("Resource was marked with kind Pod but was unable to be converted") @@ -140,13 +144,13 @@ func (p *Plugin) Admit(attributes admission.Attributes, o admission.ObjectInterf } } - klog.V(4).Infof("debug: oldpod: spec: %v, workloadInfo: %v", oldPod.Spec, oldPod.Spec.WorkloadInfo) - klog.V(4).Infof("debug: newpod: spec: %v, workloadInfo: %v", pod.Spec, pod.Spec.WorkloadInfo) - klog.V(4).Infof("debug: SetWorkloads") + //klog.V(4).Infof("debug: oldpod: spec: %v, workloadInfo: %v", oldPod.Spec, oldPod.Spec.WorkloadInfo) + //klog.V(4).Infof("debug: newpod: spec: %v, workloadInfo: %v", pod.Spec, pod.Spec.WorkloadInfo) + //klog.V(4).Infof("debug: SetWorkloads") pod.Spec.SetWorkloads() - klog.V(4).Infof("debug: oldpod: spec: %v, workloadInfo: %v", oldPod.Spec, oldPod.Spec.WorkloadInfo) - klog.V(4).Infof("debug: newpod: spec: %v, workloadInfo: %v", pod.Spec, pod.Spec.WorkloadInfo) + //klog.V(4).Infof("debug: oldpod: spec: %v, workloadInfo: %v", oldPod.Spec, oldPod.Spec.WorkloadInfo) + //klog.V(4).Infof("debug: newpod: spec: %v, workloadInfo: %v", pod.Spec, pod.Spec.WorkloadInfo) } return nil }