func (v *vulcan) NewMiddlewares(rsc *kubernetes.Resource) ([]loadbalancer.Middleware, error) { mids := make([]loadbalancer.Middleware, 0, 1) for key, def := range DefaultMiddleware { if val, ok := rsc.GetAnnotation(key); ok && len(val) > 0 { switch key { case RedirectSSLID: if b, er := strconv.ParseBool(val); er != nil || !b { continue } case TraceID: re := regexp.MustCompile(`\s+`) list, er := json.Marshal(strings.Split(re.ReplaceAllString(val, ""), ",")) if er != nil || string(list) == "" { logger.Warnf("Unable to json-ify trace headers: %v", er) list = []byte("[]") } def = fmt.Sprintf(def, string(list), string(list)) case AuthID: bits := strings.SplitN(val, ":", 2) switch len(bits) { case 1: def = fmt.Sprintf(def, bits[0], "") case 2: def = fmt.Sprintf(def, bits[0], bits[1]) default: logger.Errorf("Failed to parse provided basic auth, using default (admin:admin)") def = fmt.Sprintf(def, "admin", "admin") } case MaintenanceID: def = fmt.Sprintf(def, val) } m, er := engine.MiddlewareFromJSON([]byte(def), v.Registry.GetSpec, key) if er != nil { logger.Warnf("Failed to parse Middleware %s: %v", key, er) logger.Debugf("%q", def) continue } mids = append(mids, newMiddleware(m)) } } rg := regexp.MustCompile(CustomMiddlewareKeyPattern) matches, _ := rsc.GetAnnotations(CustomMiddlewareKeyPattern) for key, val := range matches { if match := rg.FindStringSubmatch(key); match != nil { id := match[1] m, er := engine.MiddlewareFromJSON([]byte(val), v.Registry.GetSpec, id) if er != nil { logger.Warnf("Failed to parse Middleware %s: %v", id, er) continue } mids = append(mids, newMiddleware(m)) } } return mids, nil }