aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/kubernetes')
-rw-r--r--middleware/kubernetes/k8stest/k8stest.go11
-rw-r--r--middleware/kubernetes/kubernetes.go18
-rw-r--r--middleware/kubernetes/nametemplate/nametemplate.go25
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