func CopyIngressFields()

in controllers/util/common.go [236:311]


func CopyIngressFields(from, to *netv1.Ingress, logger logr.Logger) bool {
	logger = logger.WithValues("kind", "ingress")
	requireUpdate := CopyLabelsAndAnnotations(&from.ObjectMeta, &to.ObjectMeta, logger)

	if len(to.Spec.Rules) != len(from.Spec.Rules) {
		requireUpdate = true
		logger.Info("Update required because field changed", "field", "Spec.Rules", "from", to.Spec.Rules, "to", from.Spec.Rules)
		to.Spec.Rules = from.Spec.Rules
	} else {
		for i := range from.Spec.Rules {
			ruleBase := "Spec.Rules[" + strconv.Itoa(i) + "]."
			fromRule := &from.Spec.Rules[i]
			toRule := &to.Spec.Rules[i]

			if !DeepEqualWithNils(toRule.Host, fromRule.Host) {
				requireUpdate = true
				logger.Info("Update required because field changed", "field", ruleBase+"Host", "from", toRule.Host, "to", fromRule.Host)
				toRule.Host = fromRule.Host
			}

			if fromRule.HTTP == nil || toRule.HTTP == nil {
				requireUpdate = true
				logger.Info("Update required because field changed", "field", ruleBase+"HTTP", "from", toRule.HTTP, "to", fromRule.HTTP)
				toRule.HTTP = fromRule.HTTP
			} else if len(fromRule.HTTP.Paths) != len(toRule.HTTP.Paths) {
				requireUpdate = true
				logger.Info("Update required because field changed", "field", ruleBase+"HTTP.Paths", "from", toRule.HTTP.Paths, "to", fromRule.HTTP.Paths)
				toRule.HTTP.Paths = fromRule.HTTP.Paths
			} else {
				for j := range fromRule.HTTP.Paths {
					pathBase := ruleBase + "HTTP.Paths[" + strconv.Itoa(j) + "]."
					fromPath := &fromRule.HTTP.Paths[j]
					toPath := &toRule.HTTP.Paths[j]

					if toPath.PathType != nil && !DeepEqualWithNils(toPath.PathType, fromPath.PathType) {
						requireUpdate = true
						logger.Info("Update required because field changed", "field", pathBase+"PathType", "from", toPath.PathType, "to", fromPath.PathType)
						toPath.PathType = fromPath.PathType
					}

					if !DeepEqualWithNils(toPath.Path, fromPath.Path) {
						requireUpdate = true
						logger.Info("Update required because field changed", "field", pathBase+"Path", "from", toPath.Path, "to", fromPath.Path)
						toPath.Path = fromPath.Path
					}

					if !DeepEqualWithNils(toPath.Backend.Service, fromPath.Backend.Service) {
						requireUpdate = true
						logger.Info("Update required because field changed", "field", pathBase+"Backend.Service", "from", toPath.Backend.Service, "to", fromPath.Backend.Service)
						toPath.Backend.Service = fromPath.Backend.Service
					}

					if !DeepEqualWithNils(toPath.Backend.Resource, fromPath.Backend.Resource) {
						requireUpdate = true
						logger.Info("Update required because field changed", "field", pathBase+"Backend.Resource", "from", toPath.Backend.Resource, "to", fromPath.Backend.Resource)
						toPath.Backend.Resource = fromPath.Backend.Resource
					}
				}
			}
		}
	}

	if !DeepEqualWithNils(to.Spec.TLS, from.Spec.TLS) {
		requireUpdate = true
		logger.Info("Update required because field changed", "field", "Spec.TLS", "from", to.Spec.TLS, "to", from.Spec.TLS)
		to.Spec.TLS = from.Spec.TLS
	}

	if from.Spec.IngressClassName != nil && !DeepEqualWithNils(to.Spec.IngressClassName, from.Spec.IngressClassName) {
		requireUpdate = true
		logger.Info("Update required because field changed", "field", "Spec.IngressClassName", "from", to.Spec.IngressClassName, "to", from.Spec.IngressClassName)
		to.Spec.IngressClassName = from.Spec.IngressClassName
	}

	return requireUpdate
}