diff options
Diffstat (limited to 'middleware/kubernetes')
-rw-r--r-- | middleware/kubernetes/k8stest/k8stest.go | 11 | ||||
-rw-r--r-- | middleware/kubernetes/kubernetes.go | 18 | ||||
-rw-r--r-- | middleware/kubernetes/nametemplate/nametemplate.go | 25 |
3 files changed, 44 insertions, 10 deletions
diff --git a/middleware/kubernetes/k8stest/k8stest.go b/middleware/kubernetes/k8stest/k8stest.go new file mode 100644 index 000000000..f846b0d92 --- /dev/null +++ b/middleware/kubernetes/k8stest/k8stest.go @@ -0,0 +1,11 @@ +package k8stest + +import ( + "net/http" +) + +// checkKubernetesRunning performs a basic +func CheckKubernetesRunning() bool { + _, err := http.Get("http://localhost:8080/api/v1") + return err == nil +} diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go index b8ae4f5ea..6288cb394 100644 --- a/middleware/kubernetes/kubernetes.go +++ b/middleware/kubernetes/kubernetes.go @@ -12,21 +12,17 @@ import ( "github.com/miekg/coredns/middleware/kubernetes/nametemplate" "github.com/miekg/coredns/middleware/kubernetes/util" "github.com/miekg/coredns/middleware/proxy" - // "github.com/miekg/coredns/middleware/singleflight" "github.com/miekg/dns" - "golang.org/x/net/context" ) type Kubernetes struct { - Next middleware.Handler - Zones []string - Proxy proxy.Proxy // Proxy for looking up names during the resolution process - Ctx context.Context - // Inflight *singleflight.Group + Next middleware.Handler + Zones []string + Proxy proxy.Proxy // Proxy for looking up names during the resolution process APIConn *k8sc.K8sConnector NameTemplate *nametemplate.NameTemplate - Namespaces *[]string + Namespaces []string } // getZoneForName returns the zone string that matches the name and a @@ -84,6 +80,8 @@ func (g Kubernetes) Records(name string, exact bool) ([]msg.Service, error) { serviceName = util.WildcardStar } + log.Printf("[debug] published namespaces: %v\n", g.Namespaces) + log.Printf("[debug] exact: %v\n", exact) log.Printf("[debug] zone: %v\n", zone) log.Printf("[debug] servicename: %v\n", serviceName) @@ -96,7 +94,7 @@ func (g Kubernetes) Records(name string, exact bool) ([]msg.Service, error) { // Abort if the namespace does not contain a wildcard, and namespace is not published per CoreFile // Case where namespace contains a wildcard is handled in Get(...) method. - if (!nsWildcard) && (g.Namespaces != nil && !util.StringInSlice(namespace, *g.Namespaces)) { + if (!nsWildcard) && (len(g.Namespaces) > 0) && (!util.StringInSlice(namespace, g.Namespaces)) { log.Printf("[debug] Namespace '%v' is not published by Corefile\n", namespace) return nil, nil } @@ -157,7 +155,7 @@ func (g Kubernetes) Get(namespace string, nsWildcard bool, servicename string, s if symbolMatches(namespace, item.Metadata.Namespace, nsWildcard) && symbolMatches(servicename, item.Metadata.Name, serviceWildcard) { // If namespace has a wildcard, filter results against Corefile namespace list. // (Namespaces without a wildcard were filtered before the call to this function.) - if nsWildcard && (g.Namespaces != nil && !util.StringInSlice(item.Metadata.Namespace, *g.Namespaces)) { + if nsWildcard && (len(g.Namespaces) > 0) && (!util.StringInSlice(item.Metadata.Namespace, g.Namespaces)) { log.Printf("[debug] Namespace '%v' is not published by Corefile\n", item.Metadata.Namespace) continue } diff --git a/middleware/kubernetes/nametemplate/nametemplate.go b/middleware/kubernetes/nametemplate/nametemplate.go index c2af686cd..5a34ae4ad 100644 --- a/middleware/kubernetes/nametemplate/nametemplate.go +++ b/middleware/kubernetes/nametemplate/nametemplate.go @@ -37,6 +37,11 @@ var types = []string{ "pod", } +var requiredSymbols = []string{ + "namespace", + "service", +} + // TODO: Validate that provided NameTemplate string only contains: // * valid, known symbols, or // * static strings @@ -90,6 +95,12 @@ func (t *NameTemplate) SetTemplate(s string) error { } } + if err == nil && !t.IsValid() { + err = errors.New("Record name template does not pass NameTemplate validation") + log.Printf("[debug] %v\n", err) + return err + } + return err } @@ -157,6 +168,20 @@ func (t *NameTemplate) GetRecordNameFromNameValues(values NameValues) string { return strings.Join(recordName, ".") } +func (t *NameTemplate) IsValid() bool { + result := true + + // Ensure that all requiredSymbols are found in NameTemplate + for _, symbol := range requiredSymbols { + if _, ok := t.Element[symbol]; !ok { + result = false + break + } + } + + return result +} + type NameValues struct { ServiceName string Namespace string |