Support for multiple hostnames in hostname annotation (#256)

* service source: support for multiple hostnames per annotation

* go fmt

* Make parseHostnameAnnontations inline

* Update CHANGELOG.md

* Update Changelog
This commit is contained in:
Nils Juenemann 2017-07-04 18:37:52 +02:00 committed by Yerken
parent 4d48cef482
commit bcb4972d4c
3 changed files with 53 additions and 10 deletions

View File

@ -1,6 +1,7 @@
- The `external-dns.alpha.kubernetes.io/hostname` annotation accepts now a comma separated list of hostnames and a trailing period is not required anymore.
- The flag `--domain-filter` can be repeated multiple times like `--domain-filter=example.com --domain-filter=company.org.`.
- A trailing period is not required anymore for `--domain-filter` when AWS (or any other) provider is used.
## v0.3.0 - 2017-05-08
Features:

View File

@ -140,19 +140,25 @@ func endpointsFromService(svc *v1.Service) []*endpoint.Endpoint {
var endpoints []*endpoint.Endpoint
// Get the desired hostname of the service from the annotation.
hostname, exists := svc.Annotations[hostnameAnnotationKey]
hostnameAnnotation, exists := svc.Annotations[hostnameAnnotationKey]
if !exists {
return nil
}
// Create a corresponding endpoint for each configured external entrypoint.
for _, lb := range svc.Status.LoadBalancer.Ingress {
if lb.IP != "" {
//TODO(ideahitme): consider retrieving record type from resource annotation instead of empty
endpoints = append(endpoints, endpoint.NewEndpoint(hostname, lb.IP, ""))
}
if lb.Hostname != "" {
endpoints = append(endpoints, endpoint.NewEndpoint(hostname, lb.Hostname, ""))
// splits the hostname annotation and removes the trailing periods
hostnameList := strings.Split(strings.Replace(hostnameAnnotation, " ", "", -1), ",")
for _, hostname := range hostnameList {
hostname = strings.TrimSuffix(hostname, ".")
// Create a corresponding endpoint for each configured external entrypoint.
for _, lb := range svc.Status.LoadBalancer.Ingress {
if lb.IP != "" {
//TODO(ideahitme): consider retrieving record type from resource annotation instead of empty
endpoints = append(endpoints, endpoint.NewEndpoint(hostname, lb.IP, ""))
}
if lb.Hostname != "" {
endpoints = append(endpoints, endpoint.NewEndpoint(hostname, lb.Hostname, ""))
}
}
}

View File

@ -125,6 +125,42 @@ func testServiceSourceEndpoints(t *testing.T) {
},
false,
},
{
"annotated services with multiple hostnames return an endpoint with target IP",
"",
"testing",
"foo",
"",
"",
map[string]string{},
map[string]string{
hostnameAnnotationKey: "foo.example.org., bar.example.org.",
},
[]string{"1.2.3.4"},
[]*endpoint.Endpoint{
{DNSName: "foo.example.org", Target: "1.2.3.4"},
{DNSName: "bar.example.org", Target: "1.2.3.4"},
},
false,
},
{
"annotated services with multiple hostnames and without trailing period return an endpoint with target IP",
"",
"testing",
"foo",
"",
"",
map[string]string{},
map[string]string{
hostnameAnnotationKey: "foo.example.org, bar.example.org",
},
[]string{"1.2.3.4"},
[]*endpoint.Endpoint{
{DNSName: "foo.example.org", Target: "1.2.3.4"},
{DNSName: "bar.example.org", Target: "1.2.3.4"},
},
false,
},
{
"annotated services return an endpoint with target hostname",
"",