in controllers/util/common.go [528:640]
func CopyPodContainers(fromPtr, toPtr *[]corev1.Container, basePath string, logger logr.Logger) (requireUpdate bool) {
to := *toPtr
from := *fromPtr
if len(to) != len(from) {
requireUpdate = true
logger.Info("Update required because field changed", "field", basePath+".Length", "from", len(to), "to", len(from))
*toPtr = from
} else {
for i := 0; i < len(from); i++ {
containerBasePath := basePath + "[" + strconv.Itoa(i) + "]."
if !DeepEqualWithNils(to[i].Name, from[i].Name) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Name", "from", to[i].Name, "to", from[i].Name)
to[i].Name = from[i].Name
}
if !DeepEqualWithNils(to[i].Image, from[i].Image) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Image", "from", to[i].Image, "to", from[i].Image)
to[i].Image = from[i].Image
}
if from[i].ImagePullPolicy != "" && !DeepEqualWithNils(to[i].ImagePullPolicy, from[i].ImagePullPolicy) {
// Only request an update if the requestedPullPolicy is not empty
// Otherwise kubernetes will specify a defaultPollPolicy and the operator will endlessly recurse, trying to unset the default policy.
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"ImagePullPolicy", "from", to[i].ImagePullPolicy, "to", from[i].ImagePullPolicy)
}
to[i].ImagePullPolicy = from[i].ImagePullPolicy
if !DeepEqualWithNils(to[i].Command, from[i].Command) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Command", "from", to[i].Command, "to", from[i].Command)
to[i].Command = from[i].Command
}
if !DeepEqualWithNils(to[i].Args, from[i].Args) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Args", "from", to[i].Args, "to", from[i].Args)
to[i].Args = from[i].Args
}
if !DeepEqualWithNils(to[i].Env, from[i].Env) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Env", "from", to[i].Env, "to", from[i].Env)
to[i].Env = from[i].Env
}
requireUpdate = CopyResources(&from[i].Resources, &to[i].Resources, containerBasePath+"Resources.", logger) || requireUpdate
if !DeepEqualWithNils(to[i].VolumeMounts, from[i].VolumeMounts) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"VolumeMounts", "from", to[i].VolumeMounts, "to", from[i].VolumeMounts)
to[i].VolumeMounts = from[i].VolumeMounts
}
if !DeepEqualWithNils(to[i].Ports, from[i].Ports) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Ports", "from", to[i].Ports, "to", from[i].Ports)
to[i].Ports = from[i].Ports
}
if !DeepEqualWithNils(to[i].Lifecycle, from[i].Lifecycle) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Lifecycle", "from", to[i].Lifecycle, "to", from[i].Lifecycle)
to[i].Lifecycle = from[i].Lifecycle
}
if !DeepEqualWithNils(to[i].LivenessProbe, from[i].LivenessProbe) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"LivenessProbe", "from", to[i].LivenessProbe, "to", from[i].LivenessProbe)
to[i].LivenessProbe = from[i].LivenessProbe
}
if !DeepEqualWithNils(to[i].ReadinessProbe, from[i].ReadinessProbe) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"ReadinessProbe", "from", to[i].ReadinessProbe, "to", from[i].ReadinessProbe)
to[i].ReadinessProbe = from[i].ReadinessProbe
}
if !DeepEqualWithNils(to[i].StartupProbe, from[i].StartupProbe) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"StartupProbe", "from", to[i].StartupProbe, "to", from[i].StartupProbe)
to[i].StartupProbe = from[i].StartupProbe
}
if !DeepEqualWithNils(to[i].Lifecycle, from[i].Lifecycle) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"Lifecycle", "from", to[i].Lifecycle, "to", from[i].Lifecycle)
to[i].Lifecycle = from[i].Lifecycle
}
if from[i].TerminationMessagePath != "" && !DeepEqualWithNils(to[i].TerminationMessagePath, from[i].TerminationMessagePath) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"TerminationMessagePath", "from", to[i].TerminationMessagePath, "to", from[i].TerminationMessagePath)
to[i].TerminationMessagePath = from[i].TerminationMessagePath
}
if from[i].TerminationMessagePolicy != "" && !DeepEqualWithNils(to[i].TerminationMessagePolicy, from[i].TerminationMessagePolicy) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"TerminationMessagePolicy", "from", to[i].TerminationMessagePolicy, "to", from[i].TerminationMessagePolicy)
to[i].TerminationMessagePolicy = from[i].TerminationMessagePolicy
}
if !DeepEqualWithNils(to[i].SecurityContext, from[i].SecurityContext) {
requireUpdate = true
logger.Info("Update required because field changed", "field", containerBasePath+"SecurityContext", "from", to[i].SecurityContext, "to", from[i].SecurityContext)
to[i].SecurityContext = from[i].SecurityContext
}
}
}
return requireUpdate
}