Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -773,28 +773,56 @@ func applyNodeSelectorConfig(deployment *appsv1.Deployment, config *config.Deplo
}

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

if deployment.Spec.Template.Spec.Affinity == nil {
deployment.Spec.Template.Spec.Affinity = &corev1.Affinity{}
podSpec := &deployment.Spec.Template.Spec

if reflect.DeepEqual(config.Affinity, &corev1.Affinity{}) {
podSpec.Affinity = nil
return
}

if podSpec.Affinity == nil {
podSpec.Affinity = &corev1.Affinity{}
}

if config.Affinity.NodeAffinity != nil {
deployment.Spec.Template.Spec.Affinity.NodeAffinity = config.Affinity.NodeAffinity
if reflect.DeepEqual(config.Affinity.NodeAffinity, &corev1.NodeAffinity{}) {
podSpec.Affinity.NodeAffinity = nil
} else {
podSpec.Affinity.NodeAffinity = config.Affinity.NodeAffinity
}
}

if config.Affinity.PodAffinity != nil {
deployment.Spec.Template.Spec.Affinity.PodAffinity = config.Affinity.PodAffinity
if reflect.DeepEqual(config.Affinity.PodAffinity, &corev1.PodAffinity{}) {
podSpec.Affinity.PodAffinity = nil
} else {
podSpec.Affinity.PodAffinity = config.Affinity.PodAffinity
}
}

if config.Affinity.PodAntiAffinity != nil {
deployment.Spec.Template.Spec.Affinity.PodAntiAffinity = config.Affinity.PodAntiAffinity
if reflect.DeepEqual(config.Affinity.PodAntiAffinity, &corev1.PodAntiAffinity{}) {
podSpec.Affinity.PodAntiAffinity = nil
} else {
podSpec.Affinity.PodAntiAffinity = config.Affinity.PodAntiAffinity
}
}

if reflect.DeepEqual(podSpec.Affinity, &corev1.Affinity{}) {
podSpec.Affinity = nil
}
}

Expand Down
Loading
Loading