in pkg/common/utils/resource/statefulset.go [107:183]
func clear_config_env_path_numbers_alwaysEquals(new *appv1.StatefulSet, old *appv1.StatefulSet, annoKey string, excludeReplicas bool) bool {
newAvoidEnvsSt := new.DeepCopy()
var newEnvs []corev1.EnvVar
//for find the main container position for assign envs to new equal.
nMainContainerIndex := -1
for i, c := range new.Spec.Template.Spec.Containers {
if c.Name == string(v1.Component_FE) || c.Name == string(v1.Component_BE) || c.Name == string(v1.Component_CN) || c.Name == string(v1.Component_Broker) {
for _, env := range c.Env {
newEnv := env.DeepCopy()
newEnvs = append(newEnvs, *newEnv)
}
nMainContainerIndex = i
break
}
}
var oldEnvs []corev1.EnvVar
for _, c := range old.Spec.Template.Spec.Containers {
if c.Name == string(v1.Component_FE) || c.Name == string(v1.Component_BE) || c.Name == string(v1.Component_CN) || c.Name == string(v1.Component_Broker) {
oldEnvs = c.Env
break
}
}
for i := 0; i < len(newEnvs); i++ {
if newEnvs[i].Name == config_env_name {
newEnvs = append(newEnvs[:i], newEnvs[i+1:]...)
i--
}
}
poss := []int{}
for i := 0; i < len(oldEnvs); i++ {
if oldEnvs[i].Name == config_env_name {
poss = append(poss, i)
}
}
for i := 0; i < len(poss); i++ {
if poss[i] >= len(newEnvs) {
newEnvs = append(newEnvs, corev1.EnvVar{Name: config_env_name, Value: config_env_path})
} else {
index := poss[i]
lastEnvs := append([]corev1.EnvVar{{Name: config_env_name, Value: config_env_path}}, newEnvs[index:]...)
newEnvs = append(newEnvs[:index], lastEnvs...)
}
}
if len(newEnvs) != len(oldEnvs) {
return false
} else {
for i := 0; i < len(newEnvs); i++ {
if newEnvs[i].Name != oldEnvs[i].Name {
return false
}
if newEnvs[i].Value != "" && newEnvs[i].Value != oldEnvs[i].Value {
return false
}
}
}
newAvoidEnvsSt.Spec.Template.Spec.Containers[nMainContainerIndex].Env = newEnvs
if *new.Spec.Replicas == *old.Spec.Replicas {
nAvoidOb := statefulSetHashObject(newAvoidEnvsSt, excludeReplicas)
nAvoidHash := hash.HashObject(nAvoidOb)
oldHash := old.Annotations[annoKey]
return nAvoidHash == oldHash
} else {
*newAvoidEnvsSt.Spec.Replicas = *old.Spec.Replicas
nAvoidOb := statefulSetHashObject(newAvoidEnvsSt, excludeReplicas)
nAvoidHash := hash.HashObject(nAvoidOb)
oldHash := old.Annotations[annoKey]
if nAvoidHash == oldHash {
new.Spec.Template.Spec.Containers[nMainContainerIndex].Env = newEnvs
}
return false
}
}