in watcher/handlerIngress.go [40:129]
func (g *IgHandler) add(obj interface{}) {
ingressObj, ok := obj.(*nv1.Ingress)
if !ok {
log.Println("In HandlerIngress Add; cannot cast to *nv1.Ingress")
return
}
namespace := ingressObj.GetNamespace()
// v1.18 ingress class name field in ingress object
//ingressClass, _ := util.ExtractIngressClass(ingressObj.GetAnnotations())
ingressClass, _ := util.ExtractIngressClassName(obj)
if !g.Ep.NsManager.IncludeNamespace(namespace) || !g.Ep.ATSManager.IncludeIngressClass(ingressClass) {
log.Println("Namespace not included or Ingress Class not matched")
return
}
name := ingressObj.GetName()
version := ingressObj.GetResourceVersion()
nameversion := util.ConstructNameVersionString(namespace, name, version)
// add the script before adding route
snippet, snippetErr := util.ExtractServerSnippet(ingressObj.GetAnnotations())
if snippetErr == nil {
g.Ep.RedisClient.DBOneSAdd(nameversion, snippet)
}
// add default backend rules
if ingressObj.Spec.DefaultBackend != nil {
host := "*"
scheme := "http"
path := "/"
pathType := nv1.PathTypePrefix
hostPath := util.ConstructHostPathString(scheme, host, path, pathType)
service := ingressObj.Spec.DefaultBackend.Service.Name
port := strconv.Itoa(int(ingressObj.Spec.DefaultBackend.Service.Port.Number))
svcport := util.ConstructSvcPortString(namespace, service, port)
g.Ep.RedisClient.DBOneSAdd(hostPath, svcport)
if snippetErr == nil {
g.Ep.RedisClient.DBOneSAdd(hostPath, nameversion)
}
// add default backend rule for https as well
scheme = "https"
hostPath = util.ConstructHostPathString(scheme, host, path, pathType)
g.Ep.RedisClient.DBOneSAdd(hostPath, svcport)
if snippetErr == nil {
g.Ep.RedisClient.DBOneSAdd(hostPath, nameversion)
}
}
tlsHosts := make(map[string]string)
for _, ingressTLS := range ingressObj.Spec.TLS {
for _, tlsHost := range ingressTLS.Hosts {
tlsHosts[tlsHost] = "1"
}
}
for _, ingressRule := range ingressObj.Spec.Rules {
host := ingressRule.Host
if host == "" {
host = "*"
}
scheme := "http"
if _, ok := tlsHosts[host]; ok {
scheme = "https"
}
for _, httpPath := range ingressRule.HTTP.Paths {
path := httpPath.Path
pathType := *httpPath.PathType
hostPath := util.ConstructHostPathString(scheme, host, path, pathType)
service := httpPath.Backend.Service.Name
port := strconv.Itoa(int(httpPath.Backend.Service.Port.Number))
svcport := util.ConstructSvcPortString(namespace, service, port)
g.Ep.RedisClient.DBOneSAdd(hostPath, svcport)
if snippetErr == nil {
g.Ep.RedisClient.DBOneSAdd(hostPath, nameversion)
}
}
}
}