in controllers/util/zk_util.go [145:398]
func CopyZookeeperClusterFields(from, to *zkApi.ZookeeperCluster, logger logr.Logger) bool {
logger = logger.WithValues("kind", "zookeeperCluster")
requireUpdate := CopyLabelsAndAnnotations(&from.ObjectMeta, &to.ObjectMeta, logger)
if !DeepEqualWithNils(to.Spec.Replicas, from.Spec.Replicas) {
logger.Info("Update required because field changed", "field", "Spec.Replicas", "from", to.Spec.Replicas, "to", from.Spec.Replicas)
requireUpdate = true
}
to.Spec.Replicas = from.Spec.Replicas
if !DeepEqualWithNils(to.Spec.Labels, from.Spec.Labels) {
logger.Info("Update required because field changed", "field", "Spec.Labels", "from", to.Spec.Labels, "to", from.Spec.Labels)
requireUpdate = true
to.Spec.Labels = from.Spec.Labels
}
if !DeepEqualWithNils(to.Spec.Image.Repository, from.Spec.Image.Repository) {
logger.Info("Update required because field changed", "field", "Spec.Image.Repository", "from", to.Spec.Image.Repository, "to", from.Spec.Image.Repository)
requireUpdate = true
}
to.Spec.Image.Repository = from.Spec.Image.Repository
if from.Spec.Image.Tag != "" && !DeepEqualWithNils(to.Spec.Image.Tag, from.Spec.Image.Tag) {
logger.Info("Update required because field changed", "field", "Spec.Image.Tag", "from", to.Spec.Image.Tag, "to", from.Spec.Image.Tag)
requireUpdate = true
}
to.Spec.Image.Tag = from.Spec.Image.Tag
if !DeepEqualWithNils(to.Spec.Image.PullPolicy, from.Spec.Image.PullPolicy) {
logger.Info("Update required because field changed", "field", "Spec.Image.PullPolicy", "from", to.Spec.Image.PullPolicy, "to", from.Spec.Image.PullPolicy)
requireUpdate = true
}
to.Spec.Image.PullPolicy = from.Spec.Image.PullPolicy
if !DeepEqualWithNils(to.Spec.StorageType, from.Spec.StorageType) {
logger.Info("Update required because field changed", "field", "Spec.StorageType", "from", to.Spec.StorageType, "to", from.Spec.StorageType)
requireUpdate = true
to.Spec.StorageType = from.Spec.StorageType
}
if to.Spec.StorageType == "persistence" {
if to.Spec.Ephemeral != nil {
logger.Info("Update required because field changed", "field", "Spec.Ephemeral", "from", to.Spec.Ephemeral, "to", nil)
requireUpdate = true
to.Spec.Ephemeral = nil
}
if from.Spec.Persistence != nil {
if to.Spec.Persistence == nil {
logger.Info("Update required because field changed", "field", "Spec.Persistence", "from", nil, "to", from.Spec.Persistence)
requireUpdate = true
to.Spec.Persistence = from.Spec.Persistence
} else {
requireUpdate = CopyResources(&from.Spec.Persistence.PersistentVolumeClaimSpec.Resources, &to.Spec.Persistence.PersistentVolumeClaimSpec.Resources, "Spec.Persistence.PersistentVolumeClaimSpec.Resources.", logger) || requireUpdate
if !DeepEqualWithNils(to.Spec.Persistence.PersistentVolumeClaimSpec.AccessModes, from.Spec.Persistence.PersistentVolumeClaimSpec.AccessModes) {
logger.Info("Update required because field changed", "field", "Spec.Persistence.PersistentVolumeClaimSpec.AccessModes", "from", to.Spec.Persistence.PersistentVolumeClaimSpec.AccessModes, "to", from.Spec.Persistence.PersistentVolumeClaimSpec.AccessModes)
requireUpdate = true
to.Spec.Persistence.PersistentVolumeClaimSpec.AccessModes = from.Spec.Persistence.PersistentVolumeClaimSpec.AccessModes
}
if !DeepEqualWithNils(to.Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName, from.Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName) {
logger.Info("Update required because field changed", "field", "Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName", "from", to.Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName, "to", from.Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName)
requireUpdate = true
to.Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName = from.Spec.Persistence.PersistentVolumeClaimSpec.StorageClassName
}
if !DeepEqualWithNils(to.Spec.Persistence.VolumeReclaimPolicy, from.Spec.Persistence.VolumeReclaimPolicy) {
logger.Info("Update required because field changed", "field", "Spec.Persistence.VolumeReclaimPolicy", "from", to.Spec.Persistence.VolumeReclaimPolicy, "to", from.Spec.Persistence.VolumeReclaimPolicy)
requireUpdate = true
to.Spec.Persistence.VolumeReclaimPolicy = from.Spec.Persistence.VolumeReclaimPolicy
}
if !DeepEqualWithNils(to.Spec.Persistence.Annotations, from.Spec.Persistence.Annotations) {
logger.Info("Update required because field changed", "field", "Spec.Persistence.Annotations", "from", to.Spec.Persistence.Annotations, "to", from.Spec.Persistence.Annotations)
requireUpdate = true
to.Spec.Persistence.Annotations = from.Spec.Persistence.Annotations
}
}
} else if to.Spec.Persistence != nil {
logger.Info("Update required because field changed", "field", "Spec.Persistence", "from", to.Spec.Persistence, "to", nil)
requireUpdate = true
to.Spec.Persistence = nil
}
} else if to.Spec.StorageType == "ephemeral" {
if to.Spec.Persistence != nil {
logger.Info("Update required because field changed", "field", "Spec.Persistence", "from", to.Spec.Persistence, "to", nil)
requireUpdate = true
to.Spec.Persistence = nil
}
if from.Spec.Ephemeral != nil {
if to.Spec.Ephemeral == nil {
logger.Info("Update required because field changed", "field", "Spec.Ephemeral", "from", nil, "to", from.Spec.Ephemeral)
requireUpdate = true
to.Spec.Ephemeral = from.Spec.Ephemeral
} else {
if !DeepEqualWithNils(to.Spec.Ephemeral.EmptyDirVolumeSource.Medium, from.Spec.Ephemeral.EmptyDirVolumeSource.Medium) {
logger.Info("Update required because field changed", "field", "Spec.Ephemeral.EmptyDirVolumeSource.Medium", "from", to.Spec.Ephemeral.EmptyDirVolumeSource.Medium, "to", from.Spec.Ephemeral.EmptyDirVolumeSource.Medium)
requireUpdate = true
to.Spec.Ephemeral.EmptyDirVolumeSource.Medium = from.Spec.Ephemeral.EmptyDirVolumeSource.Medium
}
if !DeepEqualWithNils(to.Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit, from.Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit) {
logger.Info("Update required because field changed", "field", "Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit", "from", to.Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit, "to", from.Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit)
requireUpdate = true
to.Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit = from.Spec.Ephemeral.EmptyDirVolumeSource.SizeLimit
}
}
} else if to.Spec.Ephemeral != nil {
logger.Info("Update required because field changed", "field", "Spec.Ephemeral", "from", to.Spec.Ephemeral, "to", nil)
requireUpdate = true
to.Spec.Ephemeral = nil
}
}
requireUpdate = CopyResources(&from.Spec.Pod.Resources, &to.Spec.Pod.Resources, "Spec.Pod.Resources.", logger) || requireUpdate
if !DeepEqualWithNils(to.Spec.Pod.Env, from.Spec.Pod.Env) {
logger.Info("Update required because field changed", "field", "Spec.Pod.Env", "from", to.Spec.Pod.Env, "to", from.Spec.Pod.Env)
requireUpdate = true
to.Spec.Pod.Env = from.Spec.Pod.Env
}
if !DeepEqualWithNils(to.Spec.Pod.Tolerations, from.Spec.Pod.Tolerations) {
logger.Info("Update required because field changed", "field", "Spec.Pod.Tolerations", "from", to.Spec.Pod.Tolerations, "to", from.Spec.Pod.Tolerations)
requireUpdate = true
to.Spec.Pod.Tolerations = from.Spec.Pod.Tolerations
}
if !DeepEqualWithNils(to.Spec.Pod.NodeSelector, from.Spec.Pod.NodeSelector) {
logger.Info("Update required because field changed", "field", "Spec.Pod.NodeSelector", "from", to.Spec.Pod.NodeSelector, "to", from.Spec.Pod.NodeSelector)
requireUpdate = true
to.Spec.Pod.NodeSelector = from.Spec.Pod.NodeSelector
}
// The Zookeeper operator defaults the pod affinity, so we only want to require an update if the requested affinity is not null
// But always change it so that the change will be picked up if another change is done.
if !DeepEqualWithNils(to.Spec.Pod.Affinity, from.Spec.Pod.Affinity) && from.Spec.Pod.Affinity != nil {
logger.Info("Update required because field changed", "field", "Spec.Pod.Affinity", "from", to.Spec.Pod.Affinity, "to", from.Spec.Pod.Affinity)
requireUpdate = true
}
to.Spec.Pod.Affinity = from.Spec.Pod.Affinity
// The Zookeeper Operator defaults the serviceAccountName to "default", therefore only update if either of the following
// - The new serviceAccountName is not empty
// - The old serviceAccountName is not "default", so we know we want to switch to the default value.
if !DeepEqualWithNils(to.Spec.Pod.ServiceAccountName, from.Spec.Pod.ServiceAccountName) && (from.Spec.Pod.ServiceAccountName != "" || to.Spec.Pod.ServiceAccountName != "default") {
logger.Info("Update required because field changed", "field", "Spec.Pod.ServiceAccountName", "from", to.Spec.Pod.ServiceAccountName, "to", from.Spec.Pod.ServiceAccountName)
requireUpdate = true
to.Spec.Pod.ServiceAccountName = from.Spec.Pod.ServiceAccountName
}
if !DeepEqualWithNils(to.Spec.Pod.Labels, from.Spec.Pod.Labels) {
logger.Info("Update required because field changed", "field", "Spec.Pod.Labels", "from", to.Spec.Pod.Labels, "to", from.Spec.Pod.Labels)
requireUpdate = true
to.Spec.Pod.Labels = from.Spec.Pod.Labels
}
if !DeepEqualWithNils(to.Spec.Pod.Annotations, from.Spec.Pod.Annotations) {
logger.Info("Update required because field changed", "field", "Spec.Pod.Annotations", "from", to.Spec.Pod.Annotations, "to", from.Spec.Pod.Annotations)
requireUpdate = true
to.Spec.Pod.Annotations = from.Spec.Pod.Annotations
}
if !DeepEqualWithNils(to.Spec.Pod.SecurityContext, from.Spec.Pod.SecurityContext) {
logger.Info("Update required because field changed", "field", "Spec.Pod.SecurityContext", "from", to.Spec.Pod.SecurityContext, "to", from.Spec.Pod.SecurityContext)
requireUpdate = true
to.Spec.Pod.SecurityContext = from.Spec.Pod.SecurityContext
}
if !DeepEqualWithNils(to.Spec.Pod.TerminationGracePeriodSeconds, from.Spec.Pod.TerminationGracePeriodSeconds) {
logger.Info("Update required because field changed", "field", "Spec.Pod.TerminationGracePeriodSeconds", "from", to.Spec.Pod.TerminationGracePeriodSeconds, "to", from.Spec.Pod.TerminationGracePeriodSeconds)
requireUpdate = true
to.Spec.Pod.TerminationGracePeriodSeconds = from.Spec.Pod.TerminationGracePeriodSeconds
}
if !DeepEqualWithNils(to.Spec.Pod.ImagePullSecrets, from.Spec.Pod.ImagePullSecrets) {
logger.Info("Update required because field changed", "field", "Spec.Pod.ImagePullSecrets", "from", to.Spec.Pod.ImagePullSecrets, "to", from.Spec.Pod.ImagePullSecrets)
requireUpdate = true
to.Spec.Pod.ImagePullSecrets = from.Spec.Pod.ImagePullSecrets
}
if !DeepEqualWithNils(to.Spec.Pod.TopologySpreadConstraints, from.Spec.Pod.TopologySpreadConstraints) {
logger.Info("Update required because field changed", "field", "Spec.Pod.TopologySpreadConstraints", "from", to.Spec.Pod.TopologySpreadConstraints, "to", from.Spec.Pod.TopologySpreadConstraints)
requireUpdate = true
to.Spec.Pod.TopologySpreadConstraints = from.Spec.Pod.TopologySpreadConstraints
}
if !DeepEqualWithNils(to.Spec.KubernetesClusterDomain, from.Spec.KubernetesClusterDomain) && from.Spec.KubernetesClusterDomain != "" {
logger.Info("Update required because field changed", "field", "Spec.KubernetesClusterDomain", "from", to.Spec.KubernetesClusterDomain, "to", from.Spec.KubernetesClusterDomain)
requireUpdate = true
}
to.Spec.KubernetesClusterDomain = from.Spec.KubernetesClusterDomain
if !DeepEqualWithNils(to.Spec.Probes, from.Spec.Probes) {
logger.Info("Update required because field changed", "field", "Spec.Probes", "from", to.Spec.Probes, "to", from.Spec.Probes)
requireUpdate = true
to.Spec.Probes = from.Spec.Probes
}
if !DeepEqualWithNils(to.Spec.Conf, from.Spec.Conf) {
logger.Info("Update required because field changed", "field", "Spec.Conf", "from", to.Spec.Conf, "to", from.Spec.Conf)
requireUpdate = true
to.Spec.Conf = from.Spec.Conf
}
if !DeepEqualWithNils(to.Spec.Containers, from.Spec.Containers) {
logger.Info("Update required because field changed", "field", "Spec.Containers", "from", to.Spec.Containers, "to", from.Spec.Containers)
requireUpdate = true
to.Spec.Containers = from.Spec.Containers
}
if !DeepEqualWithNils(to.Spec.InitContainers, from.Spec.InitContainers) {
logger.Info("Update required because field changed", "field", "Spec.InitContainers", "from", to.Spec.InitContainers, "to", from.Spec.InitContainers)
requireUpdate = true
to.Spec.InitContainers = from.Spec.InitContainers
}
if !DeepEqualWithNils(to.Spec.Volumes, from.Spec.Volumes) {
logger.Info("Update required because field changed", "field", "Spec.Volumes", "from", to.Spec.Volumes, "to", from.Spec.Volumes)
requireUpdate = true
to.Spec.Volumes = from.Spec.Volumes
}
if !DeepEqualWithNils(to.Spec.VolumeMounts, from.Spec.VolumeMounts) {
logger.Info("Update required because field changed", "field", "Spec.VolumeMounts", "from", to.Spec.VolumeMounts, "to", from.Spec.VolumeMounts)
requireUpdate = true
to.Spec.VolumeMounts = from.Spec.VolumeMounts
}
if !DeepEqualWithNils(to.Spec.AdminServerService, from.Spec.AdminServerService) {
logger.Info("Update required because field changed", "field", "Spec.AdminServerService", "from", to.Spec.AdminServerService, "to", from.Spec.AdminServerService)
requireUpdate = true
to.Spec.AdminServerService = from.Spec.AdminServerService
}
if !DeepEqualWithNils(to.Spec.ClientService, from.Spec.ClientService) {
logger.Info("Update required because field changed", "field", "Spec.ClientService", "from", to.Spec.ClientService, "to", from.Spec.ClientService)
requireUpdate = true
to.Spec.ClientService = from.Spec.ClientService
}
if !DeepEqualWithNils(to.Spec.HeadlessService, from.Spec.HeadlessService) {
logger.Info("Update required because field changed", "field", "Spec.ClientService", "from", to.Spec.HeadlessService, "to", from.Spec.HeadlessService)
requireUpdate = true
to.Spec.HeadlessService = from.Spec.HeadlessService
}
if !DeepEqualWithNils(to.Spec.MaxUnavailableReplicas, from.Spec.MaxUnavailableReplicas) {
logger.Info("Update required because field changed", "field", "Spec.MaxUnavailableReplicas", "from", to.Spec.MaxUnavailableReplicas, "to", from.Spec.MaxUnavailableReplicas)
requireUpdate = true
to.Spec.MaxUnavailableReplicas = from.Spec.MaxUnavailableReplicas
}
return requireUpdate
}