-
Notifications
You must be signed in to change notification settings - Fork 168
/
labels.go
42 lines (37 loc) · 1.04 KB
/
labels.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package generator
import (
"strconv"
"strings"
"text/template"
"github.com/lucaslorentz/caddy-docker-proxy/plugin/caddyfile"
)
type targetsProvider func() ([]string, error)
func labelsToCaddyfile(labels map[string]string, templateData interface{}, getTargets targetsProvider) (*caddyfile.Container, error) {
funcMap := template.FuncMap{
"upstreams": func(options ...interface{}) (string, error) {
targets, err := getTargets()
transformed := []string{}
for _, target := range targets {
for _, param := range options {
if protocol, isProtocol := param.(string); isProtocol {
target = protocol + "://" + target
} else if port, isPort := param.(int); isPort {
target = target + ":" + strconv.Itoa(port)
}
}
transformed = append(transformed, target)
}
return strings.Join(transformed, " "), err
},
"http": func() string {
return "http"
},
"https": func() string {
return "https"
},
"h2c": func() string {
return "h2c"
},
}
return caddyfile.FromLabels(labels, templateData, funcMap)
}