diff --git a/generator/containers_test.go b/generator/containers_test.go index a5e6b6d..97ac444 100644 --- a/generator/containers_test.go +++ b/generator/containers_test.go @@ -13,7 +13,7 @@ func TestContainers_TemplateData(t *testing.T) { dockerClient.ContainersData = []types.Container{ { Names: []string{ - "container-name", + "/container-name", }, NetworkSettings: &types.SummaryNetworkSettings{ Networks: map[string]*network.EndpointSettings{ @@ -24,7 +24,7 @@ func TestContainers_TemplateData(t *testing.T) { }, }, Labels: map[string]string{ - fmtLabel("%s"): "{{index .Names 0}}.testdomain.com", + fmtLabel("%s"): "{{trimPrefix \"/\" (index .Names 0)}}.testdomain.com", fmtLabel("%s.reverse_proxy"): "{{(index .NetworkSettings.Networks \"caddy-network\").IPAddress}}:5000/api", }, }, diff --git a/generator/labels.go b/generator/labels.go index 3dff315..ccb7642 100644 --- a/generator/labels.go +++ b/generator/labels.go @@ -1,45 +1,38 @@ package generator import ( + "sort" "strconv" "strings" - "text/template" - "sort" + "github.com/Masterminds/sprig/v3" "github.com/lucaslorentz/caddy-docker-proxy/v2/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() - sort.Strings(targets) - 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) - } + funcMap := sprig.TxtFuncMap() + funcMap["upstreams"] = func(options ...interface{}) (string, error) { + targets, err := getTargets() + sort.Strings(targets) + 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) } - sort.Strings(transformed) - return strings.Join(transformed, " "), err - }, - "http": func() string { - return "http" - }, - "https": func() string { - return "https" - }, - "h2c": func() string { - return "h2c" - }, + transformed = append(transformed, target) + } + sort.Strings(transformed) + return strings.Join(transformed, " "), err } + funcMap["http"] = func() string { return "http" } + funcMap["https"] = func() string { return "https" } + funcMap["h2c"] = func() string { return "h2c" } return caddyfile.FromLabels(labels, templateData, funcMap) }