feat(consulcatalog): add HealthCheck tags.
This commit is contained in:
parent
c9b871a03a
commit
97ce77169a
3 changed files with 76 additions and 0 deletions
|
@ -37,6 +37,7 @@ func (p *CatalogProvider) buildConfiguration(catalog []catalogUpdate) *types.Con
|
||||||
"getCircuitBreaker": p.getCircuitBreaker,
|
"getCircuitBreaker": p.getCircuitBreaker,
|
||||||
"getLoadBalancer": p.getLoadBalancer,
|
"getLoadBalancer": p.getLoadBalancer,
|
||||||
"getMaxConn": p.getMaxConn,
|
"getMaxConn": p.getMaxConn,
|
||||||
|
"getHealthCheck": p.getHealthCheck,
|
||||||
|
|
||||||
// Frontend functions
|
// Frontend functions
|
||||||
"getFrontendRule": p.getFrontendRule,
|
"getFrontendRule": p.getFrontendRule,
|
||||||
|
@ -266,6 +267,23 @@ func (p *CatalogProvider) getMaxConn(tags []string) *types.MaxConn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *CatalogProvider) getHealthCheck(tags []string) *types.HealthCheck {
|
||||||
|
path := p.getAttribute(label.SuffixBackendHealthCheckPath, tags, "")
|
||||||
|
|
||||||
|
if len(path) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
port := p.getIntAttribute(label.SuffixBackendHealthCheckPort, tags, label.DefaultBackendHealthCheckPort)
|
||||||
|
interval := p.getAttribute(label.SuffixBackendHealthCheckInterval, tags, "")
|
||||||
|
|
||||||
|
return &types.HealthCheck{
|
||||||
|
Path: path,
|
||||||
|
Port: port,
|
||||||
|
Interval: interval,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Base functions
|
// Base functions
|
||||||
|
|
||||||
func (p *CatalogProvider) getFuncStringAttribute(name string, defaultValue string) func(tags []string) string {
|
func (p *CatalogProvider) getFuncStringAttribute(name string, defaultValue string) func(tags []string) string {
|
||||||
|
|
|
@ -946,3 +946,53 @@ func TestCatalogProviderGetMaxConn(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCatalogProviderGetHealthCheck(t *testing.T) {
|
||||||
|
p := &CatalogProvider{
|
||||||
|
Prefix: "traefik",
|
||||||
|
}
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
desc string
|
||||||
|
tags []string
|
||||||
|
expected *types.HealthCheck
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
desc: "should return nil when no tags",
|
||||||
|
tags: []string{},
|
||||||
|
expected: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "should return nil when Path tag is missing",
|
||||||
|
tags: []string{
|
||||||
|
label.TraefikBackendHealthCheckPort + "=80",
|
||||||
|
label.TraefikBackendHealthCheckInterval + "=7",
|
||||||
|
},
|
||||||
|
expected: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "should return a struct when has tags",
|
||||||
|
tags: []string{
|
||||||
|
label.TraefikBackendHealthCheckPath + "=/health",
|
||||||
|
label.TraefikBackendHealthCheckPort + "=80",
|
||||||
|
label.TraefikBackendHealthCheckInterval + "=7",
|
||||||
|
},
|
||||||
|
expected: &types.HealthCheck{
|
||||||
|
Path: "/health",
|
||||||
|
Port: 80,
|
||||||
|
Interval: "7",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
test := test
|
||||||
|
t.Run(test.desc, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
result := p.getHeathCheck(test.tags)
|
||||||
|
|
||||||
|
assert.Equal(t, test.expected, result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -26,6 +26,14 @@
|
||||||
amount = {{ $maxConn.Amount }}
|
amount = {{ $maxConn.Amount }}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
|
{{ $healthCheck := getHealthCheck $service.Attributes }}
|
||||||
|
{{if $healthCheck }}
|
||||||
|
[backends.backend-{{ $sname }}.healthCheck]
|
||||||
|
path = "{{ $healthCheck.Path }}"
|
||||||
|
port = {{ $healthCheck.Port }}
|
||||||
|
interval = "{{ $healthCheck.Interval }}"
|
||||||
|
{{end}}
|
||||||
|
|
||||||
{{end}}
|
{{end}}
|
||||||
{{range $index, $node := .Nodes}}
|
{{range $index, $node := .Nodes}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue