Skip to content

Commit

Permalink
Refactor: generatePatchesForPodWithNodeName() to handle nodeName case…
Browse files Browse the repository at this point in the history
… separately

Signed-off-by: Itamar Holder <iholder@redhat.com>
  • Loading branch information
iholder101 committed Apr 16, 2024
1 parent 08dde30 commit be02d00
Showing 1 changed file with 46 additions and 40 deletions.
86 changes: 46 additions & 40 deletions pkg/aaq-server/handler/handler.go
Expand Up @@ -85,46 +85,7 @@ func (v Handler) mutatePod() (*admissionv1.AdmissionReview, error) {
},
}

if pod.Spec.NodeName != "" {
affinity := pod.Spec.Affinity
affinityPatchOp := patch.PatchReplaceOp

if affinity == nil {
affinity = &v1.Affinity{}
affinityPatchOp = patch.PatchAddOp
}
if affinity.NodeAffinity == nil {
affinity.NodeAffinity = &v1.NodeAffinity{}
}
if affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution == nil {
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution = &v1.NodeSelector{}
}
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = append(
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms,
v1.NodeSelectorTerm{
MatchFields: []v1.NodeSelectorRequirement{
{
Key: "metadata.name",
Operator: v1.NodeSelectorOpIn,
Values: []string{pod.Spec.NodeName},
},
},
},
)

patches = append(patches,
patch.PatchOperation{
Op: affinityPatchOp,
Path: "/spec/affinity",
Value: affinity,
},
patch.PatchOperation{
Op: patch.PatchReplaceOp,
Path: "/spec/nodeName",
Value: "",
},
)
}
patches = append(patches, generatePatchesForPodWithNodeName(pod)...)

patchBytes, err := patch.GeneratePatchPayload(patches...)
if err != nil {
Expand Down Expand Up @@ -259,3 +220,48 @@ func getResourcesNames(resourceList v1.ResourceList) []v1.ResourceName {
}
return keys
}

func generatePatchesForPodWithNodeName(pod v1.Pod) []patch.PatchOperation {
if pod.Spec.NodeName == "" {
return nil
}

affinity := pod.Spec.Affinity
affinityPatchOp := patch.PatchReplaceOp

if affinity == nil {
affinity = &v1.Affinity{}
affinityPatchOp = patch.PatchAddOp
}
if affinity.NodeAffinity == nil {
affinity.NodeAffinity = &v1.NodeAffinity{}
}
if affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution == nil {
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution = &v1.NodeSelector{}
}
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = append(
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms,
v1.NodeSelectorTerm{
MatchFields: []v1.NodeSelectorRequirement{
{
Key: "metadata.name",
Operator: v1.NodeSelectorOpIn,
Values: []string{pod.Spec.NodeName},
},
},
},
)

return []patch.PatchOperation{
{
Op: affinityPatchOp,
Path: "/spec/affinity",
Value: affinity,
},
{
Op: patch.PatchReplaceOp,
Path: "/spec/nodeName",
Value: "",
},
}
}

0 comments on commit be02d00

Please sign in to comment.