@@ -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
779784func 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