Merge pull request #359 from chrisohaver/replace_sky

Add type to default template
This commit is contained in:
John Belamaric 2016-11-09 14:02:06 -08:00 committed by GitHub
commit 611d83ed97
4 changed files with 40 additions and 40 deletions

View file

@ -48,7 +48,7 @@ This is the default kubernetes setup, with everything specified in full:
# The tls cert, key and the CA cert filenames # The tls cert, key and the CA cert filenames
tls cert key cacert tls cert key cacert
# Assemble k8s record names with the template # Assemble k8s record names with the template
template {service}.{namespace}.{zone} template {service}.{namespace}.{type}.{zone}
# Only expose the k8s namespace "demo" # Only expose the k8s namespace "demo"
namespaces demo namespaces demo
# Only expose the records for kubernetes objects # Only expose the records for kubernetes objects
@ -67,7 +67,7 @@ This is the default kubernetes setup, with everything specified in full:
Defaults: Defaults:
* If the `namespaces` keyword is omitted, all kubernetes namespaces are exposed. * If the `namespaces` keyword is omitted, all kubernetes namespaces are exposed.
* If the `template` keyword is omitted, the default template of "{service}.{namespace}.{zone}" is used. * If the `template` keyword is omitted, the default template of "{service}.{namespace}.{type}.{zone}" is used.
* If the `resyncperiod` keyword is omitted, the default resync period is 5 minutes. * If the `resyncperiod` keyword is omitted, the default resync period is 5 minutes.
* The `labels` keyword is only used when filtering results based on kubernetes label selector syntax * The `labels` keyword is only used when filtering results based on kubernetes label selector syntax
is required. The label selector syntax is described in the kubernetes API documentation at: is required. The label selector syntax is described in the kubernetes API documentation at:
@ -130,7 +130,7 @@ Build CoreDNS and launch using this configuration file:
kubernetes coredns.local { kubernetes coredns.local {
resyncperiod 5m resyncperiod 5m
endpoint http://localhost:8080 endpoint http://localhost:8080
template {service}.{namespace}.{zone} template {service}.{namespace}.{type}.{zone}
namespaces demo namespaces demo
# Only expose the records for kubernetes objects # Only expose the records for kubernetes objects
# that matches this label selector. # that matches this label selector.

View file

@ -14,8 +14,8 @@ const (
// Map of format string :: expected locations of name symbols in the format. // Map of format string :: expected locations of name symbols in the format.
// -1 value indicates that symbol does not exist in format. // -1 value indicates that symbol does not exist in format.
var exampleTemplates = map[string][]int{ var exampleTemplates = map[string][]int{
"{service}.{namespace}.{zone}": []int{2, 1, 0}, // service symbol expected @ position 0, namespace @ 1, zone @ 2 "{service}.{namespace}.{type}.{zone}": []int{3, 1, 0}, // service symbol expected @ position 0, namespace @ 1, zone @ 3
"{namespace}.{zone}": []int{1, 0, -1}, "{namespace}.{type}.{zone}": []int{2, 0, -1},
"": []int{-1, -1, -1}, "": []int{-1, -1, -1},
} }
@ -46,10 +46,10 @@ func TestServiceFromSegmentArray(t *testing.T) {
// Case where template contains {service} // Case where template contains {service}
n = new(Template) n = new(Template)
formatString = "{service}.{namespace}.{zone}" formatString = "{service}.{namespace}.{type}.{zone}"
n.SetTemplate(formatString) n.SetTemplate(formatString)
queryString = "myservice.mynamespace.coredns" queryString = "myservice.mynamespace.svc.coredns"
splitQuery = strings.Split(queryString, ".") splitQuery = strings.Split(queryString, ".")
expectedService = "myservice" expectedService = "myservice"
actualService = n.ServiceFromSegmentArray(splitQuery) actualService = n.ServiceFromSegmentArray(splitQuery)
@ -60,10 +60,10 @@ func TestServiceFromSegmentArray(t *testing.T) {
// Case where template does not contain {service} // Case where template does not contain {service}
n = new(Template) n = new(Template)
formatString = "{namespace}.{zone}" formatString = "{namespace}.{type}.{zone}"
n.SetTemplate(formatString) n.SetTemplate(formatString)
queryString = "mynamespace.coredns" queryString = "mynamespace.svc.coredns"
splitQuery = strings.Split(queryString, ".") splitQuery = strings.Split(queryString, ".")
expectedService = "" expectedService = ""
actualService = n.ServiceFromSegmentArray(splitQuery) actualService = n.ServiceFromSegmentArray(splitQuery)
@ -85,10 +85,10 @@ func TestZoneFromSegmentArray(t *testing.T) {
// Case where template contains {zone} // Case where template contains {zone}
n = new(Template) n = new(Template)
formatString = "{service}.{namespace}.{zone}" formatString = "{service}.{namespace}.{type}.{zone}"
n.SetTemplate(formatString) n.SetTemplate(formatString)
queryString = "myservice.mynamespace.coredns" queryString = "myservice.mynamespace.svc.coredns"
splitQuery = strings.Split(queryString, ".") splitQuery = strings.Split(queryString, ".")
expectedZone = "coredns" expectedZone = "coredns"
actualZone = n.ZoneFromSegmentArray(splitQuery) actualZone = n.ZoneFromSegmentArray(splitQuery)
@ -99,10 +99,10 @@ func TestZoneFromSegmentArray(t *testing.T) {
// Case where template does not contain {zone} // Case where template does not contain {zone}
n = new(Template) n = new(Template)
formatString = "{service}.{namespace}" formatString = "{service}.{namespace}.{type}"
n.SetTemplate(formatString) n.SetTemplate(formatString)
queryString = "mynamespace.coredns" queryString = "mynamespace.coredns.svc"
splitQuery = strings.Split(queryString, ".") splitQuery = strings.Split(queryString, ".")
expectedZone = "" expectedZone = ""
actualZone = n.ZoneFromSegmentArray(splitQuery) actualZone = n.ZoneFromSegmentArray(splitQuery)
@ -113,10 +113,10 @@ func TestZoneFromSegmentArray(t *testing.T) {
// Case where zone is multiple segments // Case where zone is multiple segments
n = new(Template) n = new(Template)
formatString = "{service}.{namespace}.{zone}" formatString = "{service}.{namespace}.{type}.{zone}"
n.SetTemplate(formatString) n.SetTemplate(formatString)
queryString = "myservice.mynamespace.coredns.cluster.local" queryString = "myservice.mynamespace.svc.coredns.cluster.local"
splitQuery = strings.Split(queryString, ".") splitQuery = strings.Split(queryString, ".")
expectedZone = "coredns.cluster.local" expectedZone = "coredns.cluster.local"
actualZone = n.ZoneFromSegmentArray(splitQuery) actualZone = n.ZoneFromSegmentArray(splitQuery)

View file

@ -137,6 +137,6 @@ func kubernetesParse(c *caddy.Controller) (*Kubernetes, error) {
} }
const ( const (
defaultNameTemplate = "{service}.{namespace}.{zone}" defaultNameTemplate = "{service}.{namespace}.{type}.{zone}"
defaultResyncPeriod = 5 * time.Minute defaultResyncPeriod = 5 * time.Minute
) )

View file

@ -19,22 +19,22 @@ var testdataLookupA = []struct {
ARecordCount int ARecordCount int
}{ }{
// Matching queries // Matching queries
{"mynginx.demo.coredns.local.", 1, 1}, // One A record, should exist {"mynginx.demo.svc.coredns.local.", 1, 1}, // One A record, should exist
// Failure queries // Failure queries
{"mynginx.test.coredns.local.", 0, 0}, // One A record, is not exposed {"mynginx.test.svc.coredns.local.", 0, 0}, // One A record, is not exposed
{"someservicethatdoesnotexist.demo.coredns.local.", 0, 0}, // Record does not exist {"someservicethatdoesnotexist.demo.svc.coredns.local.", 0, 0}, // Record does not exist
// Namespace wildcards // Namespace wildcards
{"mynginx.*.coredns.local.", 1, 1}, // One A record, via wildcard namespace {"mynginx.*.svc.coredns.local.", 1, 1}, // One A record, via wildcard namespace
{"mynginx.any.coredns.local.", 1, 1}, // One A record, via wildcard namespace {"mynginx.any.svc.coredns.local.", 1, 1}, // One A record, via wildcard namespace
{"someservicethatdoesnotexist.*.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace {"someservicethatdoesnotexist.*.svc.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace
{"someservicethatdoesnotexist.any.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace {"someservicethatdoesnotexist.any.svc.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace
{"*.demo.coredns.local.", 2, 2}, // Two A records, via wildcard {"*.demo.svc.coredns.local.", 2, 2}, // Two A records, via wildcard
{"any.demo.coredns.local.", 2, 2}, // Two A records, via wildcard {"any.demo.svc.coredns.local.", 2, 2}, // Two A records, via wildcard
{"*.test.coredns.local.", 0, 0}, // Two A record, via wildcard that is not exposed {"*.test.svc.coredns.local.", 0, 0}, // Two A record, via wildcard that is not exposed
{"any.test.coredns.local.", 0, 0}, // Two A record, via wildcard that is not exposed {"any.test.svc.coredns.local.", 0, 0}, // Two A record, via wildcard that is not exposed
{"*.*.coredns.local.", 2, 2}, // Two A records, via namespace and service wildcard {"*.*.svc.coredns.local.", 2, 2}, // Two A records, via namespace and service wildcard
} }
// Test data for SRV records // Test data for SRV records
@ -45,22 +45,22 @@ var testdataLookupSRV = []struct {
SRVRecordCount int SRVRecordCount int
}{ }{
// Matching queries // Matching queries
{"mynginx.demo.coredns.local.", 1, 1}, // One SRV record, should exist {"mynginx.demo.svc.coredns.local.", 1, 1}, // One SRV record, should exist
// Failure queries // Failure queries
{"mynginx.test.coredns.local.", 0, 0}, // One SRV record, is not exposed {"mynginx.test.svc.coredns.local.", 0, 0}, // One SRV record, is not exposed
{"someservicethatdoesnotexist.demo.coredns.local.", 0, 0}, // Record does not exist {"someservicethatdoesnotexist.demo.svc.coredns.local.", 0, 0}, // Record does not exist
// Namespace wildcards // Namespace wildcards
{"mynginx.*.coredns.local.", 1, 1}, // One SRV record, via wildcard namespace {"mynginx.*.svc.coredns.local.", 1, 1}, // One SRV record, via wildcard namespace
{"mynginx.any.coredns.local.", 1, 1}, // One SRV record, via wildcard namespace {"mynginx.any.svc.coredns.local.", 1, 1}, // One SRV record, via wildcard namespace
{"someservicethatdoesnotexist.*.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace {"someservicethatdoesnotexist.*.svc.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace
{"someservicethatdoesnotexist.any.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace {"someservicethatdoesnotexist.any.svc.coredns.local.", 0, 0}, // Record does not exist with wildcard for namespace
{"*.demo.coredns.local.", 2, 2}, // Two (mynginx, webserver) SRV record, via wildcard {"*.demo.svc.coredns.local.", 2, 2}, // Two (mynginx, webserver) SRV record, via wildcard
{"any.demo.coredns.local.", 2, 2}, // Two (mynginx, webserver) SRV record, via wildcard {"any.demo.svc.coredns.local.", 2, 2}, // Two (mynginx, webserver) SRV record, via wildcard
{"*.test.coredns.local.", 0, 0}, // One SRV record, via wildcard that is not exposed {"*.test.svc.coredns.local.", 0, 0}, // One SRV record, via wildcard that is not exposed
{"any.test.coredns.local.", 0, 0}, // One SRV record, via wildcard that is not exposed {"any.test.svc.coredns.local.", 0, 0}, // One SRV record, via wildcard that is not exposed
{"*.*.coredns.local.", 2, 2}, // Two SRV record, via namespace and service wildcard {"*.*.svc.coredns.local.", 2, 2}, // Two SRV record, via namespace and service wildcard
} }
func TestKubernetesIntegration(t *testing.T) { func TestKubernetesIntegration(t *testing.T) {