1
0
mirror of https://github.com/rancher/rke.git synced 2025-09-13 13:40:22 +00:00

Ignore label=disable when comparing containers

This commit is contained in:
Sebastiaan van Steenis
2019-09-03 17:40:31 +02:00
committed by Alena Prokharchyk
parent 01c2237ba3
commit 4833568e38

View File

@@ -507,7 +507,7 @@ func IsContainerUpgradable(ctx context.Context, dClient *client.Client, imageCfg
!sliceEqualsIgnoreOrder(containerInspect.Config.Cmd, imageCfg.Cmd) ||
!isContainerEnvChanged(containerInspect.Config.Env, imageCfg.Env, imageInspect.Config.Env) ||
!sliceEqualsIgnoreOrder(containerInspect.HostConfig.Binds, hostCfg.Binds) ||
!sliceEqualsIgnoreOrder(containerInspect.HostConfig.SecurityOpt, hostCfg.SecurityOpt) {
!securityOptsliceEqualsIgnoreOrder(containerInspect.HostConfig.SecurityOpt, hostCfg.SecurityOpt) {
logrus.Debugf("[%s] Container [%s] is eligible for upgrade on host [%s]", plane, containerName, hostname)
return true, nil
}
@@ -518,6 +518,23 @@ func IsContainerUpgradable(ctx context.Context, dClient *client.Client, imageCfg
func sliceEqualsIgnoreOrder(left, right []string) bool {
if equal := sets.NewString(left...).Equal(sets.NewString(right...)); !equal {
logrus.Debugf("slice is not equal, showing data in new value which is not in old value: %v", sets.NewString(right...).Difference(sets.NewString(left...)))
logrus.Debugf("slice is not equal, showing data in old value which is not in new value: %v", sets.NewString(left...).Difference(sets.NewString(right...)))
return false
}
return true
}
func securityOptsliceEqualsIgnoreOrder(left, right []string) bool {
if equal := sets.NewString(left...).Equal(sets.NewString(right...)); !equal {
logrus.Debugf("slice is not equal, showing data in new value which is not in old value: %v", sets.NewString(right...).Difference(sets.NewString(left...)))
diff := sets.NewString(left...).Difference(sets.NewString(right...))
logrus.Debugf("slice is not equal, showing data in old value which is not in new value: %v", diff)
// Docker sets label=disable automatically on all non labeled containers with will result in a false diff between spec and the actual running container
// If the diff matches the disable label exactly, we still report true as being equal
if equal := sets.NewString([]string{"label=disable"}...).Equal(diff); equal {
logrus.Debugf("returning equal as true because diff matches the automatically added disable label for SELinux which can be ignored: %v", diff)
return true
}
return false
}
return true