Skip to content

Commit 934ab7d

Browse files
fix(deploymentConfig): handle empty affinity objects to match OLMv0 erasure behavior
Assisted-by: Cursor/Claude
1 parent c16a97b commit 934ab7d

File tree

32 files changed

+45279
-8
lines changed

32 files changed

+45279
-8
lines changed

internal/operator-controller/rukpak/render/registryv1/generators/generators.go

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -773,28 +773,56 @@ func applyNodeSelectorConfig(deployment *appsv1.Deployment, config *config.Deplo
773773
}
774774

775775
// applyAffinityConfig applies affinity configuration to the deployment's pod spec.
776-
// This selectively overrides non-nil affinity sub-attributes.
777-
// This follows OLMv0 behavior:
778-
// https://github.com/operator-framework/operator-lifecycle-manager/blob/v0.39.0/pkg/controller/operators/olm/overrides/inject/inject.go#L273-L341
776+
// This follows OLMv0 behavior where:
777+
// - nil affinity means "don't touch" the deployment's existing affinity
778+
// - empty affinity ({}) means "erase" the deployment's existing affinity
779+
// - non-nil sub-attributes override the corresponding deployment sub-attributes
780+
// - nil sub-attributes within a non-empty affinity are left unchanged
781+
// - empty sub-attributes ({}) erase the corresponding deployment sub-attributes
782+
//
783+
// See: https://github.com/operator-framework/operator-lifecycle-manager/blob/v0.39.0/pkg/controller/operators/olm/overrides/inject/inject.go#L273-L341
779784
func applyAffinityConfig(deployment *appsv1.Deployment, config *config.DeploymentConfig) {
780785
if config.Affinity == nil {
781786
return
782787
}
783788

784-
if deployment.Spec.Template.Spec.Affinity == nil {
785-
deployment.Spec.Template.Spec.Affinity = &corev1.Affinity{}
789+
podSpec := &deployment.Spec.Template.Spec
790+
791+
if reflect.DeepEqual(config.Affinity, &corev1.Affinity{}) {
792+
podSpec.Affinity = nil
793+
return
794+
}
795+
796+
if podSpec.Affinity == nil {
797+
podSpec.Affinity = &corev1.Affinity{}
786798
}
787799

788800
if config.Affinity.NodeAffinity != nil {
789-
deployment.Spec.Template.Spec.Affinity.NodeAffinity = config.Affinity.NodeAffinity
801+
if reflect.DeepEqual(config.Affinity.NodeAffinity, &corev1.NodeAffinity{}) {
802+
podSpec.Affinity.NodeAffinity = nil
803+
} else {
804+
podSpec.Affinity.NodeAffinity = config.Affinity.NodeAffinity
805+
}
790806
}
791807

792808
if config.Affinity.PodAffinity != nil {
793-
deployment.Spec.Template.Spec.Affinity.PodAffinity = config.Affinity.PodAffinity
809+
if reflect.DeepEqual(config.Affinity.PodAffinity, &corev1.PodAffinity{}) {
810+
podSpec.Affinity.PodAffinity = nil
811+
} else {
812+
podSpec.Affinity.PodAffinity = config.Affinity.PodAffinity
813+
}
794814
}
795815

796816
if config.Affinity.PodAntiAffinity != nil {
797-
deployment.Spec.Template.Spec.Affinity.PodAntiAffinity = config.Affinity.PodAntiAffinity
817+
if reflect.DeepEqual(config.Affinity.PodAntiAffinity, &corev1.PodAntiAffinity{}) {
818+
podSpec.Affinity.PodAntiAffinity = nil
819+
} else {
820+
podSpec.Affinity.PodAntiAffinity = config.Affinity.PodAntiAffinity
821+
}
822+
}
823+
824+
if reflect.DeepEqual(podSpec.Affinity, &corev1.Affinity{}) {
825+
podSpec.Affinity = nil
798826
}
799827
}
800828

0 commit comments

Comments
 (0)