1
0
mirror of https://github.com/rancher/rke.git synced 2025-08-19 07:17:30 +00:00

Correctly compare image env and container env

This commit is contained in:
galal-hussein 2018-07-25 16:18:11 +02:00 committed by Alena Prokharchyk
parent bfb5d2e875
commit 5aca37c1cf

View File

@ -309,10 +309,15 @@ func IsContainerUpgradable(ctx context.Context, dClient *client.Client, imageCfg
if err != nil { if err != nil {
return false, err return false, err
} }
// image inspect to compare the env correctly
imageInspect, _, err := dClient.ImageInspectWithRaw(ctx, imageCfg.Image)
if err != nil {
return false, err
}
if containerInspect.Config.Image != imageCfg.Image || if containerInspect.Config.Image != imageCfg.Image ||
!sliceEqualsIgnoreOrder(containerInspect.Config.Entrypoint, imageCfg.Entrypoint) || !sliceEqualsIgnoreOrder(containerInspect.Config.Entrypoint, imageCfg.Entrypoint) ||
!sliceEqualsIgnoreOrder(containerInspect.Config.Cmd, imageCfg.Cmd) || !sliceEqualsIgnoreOrder(containerInspect.Config.Cmd, imageCfg.Cmd) ||
!isContainerRKEEnvChanged(containerInspect.Config.Env, imageCfg.Env) || !isContainerEnvChanged(containerInspect.Config.Env, imageCfg.Env, imageInspect.Config.Env) ||
!sliceEqualsIgnoreOrder(containerInspect.HostConfig.Binds, hostCfg.Binds) { !sliceEqualsIgnoreOrder(containerInspect.HostConfig.Binds, hostCfg.Binds) {
logrus.Debugf("[%s] Container [%s] is eligible for upgrade on host [%s]", plane, containerName, hostname) logrus.Debugf("[%s] Container [%s] is eligible for upgrade on host [%s]", plane, containerName, hostname)
return true, nil return true, nil
@ -420,20 +425,8 @@ func convertToSemver(version string) (*semver.Version, error) {
return semver.NewVersion(strings.Join(compVersion, ".")) return semver.NewVersion(strings.Join(compVersion, "."))
} }
func isContainerRKEEnvChanged(containerEnv, imageConfigEnv []string) bool { func isContainerEnvChanged(containerEnv, imageConfigEnv, dockerfileEnv []string) bool {
// remove PATH env from the container env // remove PATH env from the container env
cleanedContainerEnv := getRKEEnvVars(containerEnv) allImageEnv := append(imageConfigEnv, dockerfileEnv...)
cleanedImageConfigEnv := getRKEEnvVars(imageConfigEnv) return sliceEqualsIgnoreOrder(allImageEnv, containerEnv)
return sliceEqualsIgnoreOrder(cleanedContainerEnv, cleanedImageConfigEnv)
}
func getRKEEnvVars(env []string) []string {
tmp := []string{}
for _, e := range env {
if strings.HasPrefix(e, "RKE_") {
tmp = append(tmp, e)
}
}
return tmp
} }