func()

in pkg/k8scontext/context.go [816:855]


func (c *Context) updateMultiClusterIngressStatus(ingressToUpdate networking.Ingress, newIP IPAddress) error {
	ingressClient := c.multiClusterCrdClient.MulticlusteringressesV1alpha1().MultiClusterIngresses(ingressToUpdate.Namespace)
	ingress, err := ingressClient.Get(context.TODO(), ingressToUpdate.Name, metav1.GetOptions{})
	if err != nil {
		e := controllererrors.NewErrorWithInnerErrorf(
			controllererrors.ErrorUpdatingIngressStatus,
			err,
			"Unable to get ingress %s/%s", ingressToUpdate.Namespace, ingressToUpdate.Name,
		)
		c.MetricStore.IncErrorCount(e.Code)
		return e
	}

	for _, lbi := range ingress.Status.LoadBalancer.Ingress {
		existingIP := lbi.IP
		if existingIP == string(newIP) {
			klog.Infof("IP %s already set on Ingress %s/%s", lbi.IP, ingress.Namespace, ingress.Name)
			return nil
		}
	}

	loadBalancerIngresses := []networking.IngressLoadBalancerIngress{}
	if newIP != "" {
		loadBalancerIngresses = append(loadBalancerIngresses, networking.IngressLoadBalancerIngress{
			IP: string(newIP),
		})
	}
	ingress.Status.LoadBalancer.Ingress = loadBalancerIngresses

	if _, err := ingressClient.UpdateStatus(context.TODO(), ingress, metav1.UpdateOptions{}); err != nil {
		e := controllererrors.NewErrorWithInnerErrorf(
			controllererrors.ErrorUpdatingIngressStatus,
			err,
			"Unable to update ingress %s/%s status", ingress.Namespace, ingress.Name,
		)
		c.MetricStore.IncErrorCount(e.Code)
		return e
	}
	return nil
}