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
}