aboutsummaryrefslogtreecommitdiff
path: root/core/setup/kubernetes.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/setup/kubernetes.go')
-rw-r--r--core/setup/kubernetes.go85
1 files changed, 56 insertions, 29 deletions
diff --git a/core/setup/kubernetes.go b/core/setup/kubernetes.go
index 8f21286f5..f6e4b4806 100644
--- a/core/setup/kubernetes.go
+++ b/core/setup/kubernetes.go
@@ -1,29 +1,34 @@
package setup
import (
-// "crypto/tls"
-// "crypto/x509"
- "fmt"
-// "io/ioutil"
-// "net"
-// "net/http"
-// "time"
+ //"crypto/tls"
+ //"crypto/x509"
+ "fmt"
+ //"io/ioutil"
+ //"net"
+ //"net/http"
+ "strings"
+ //"time"
"github.com/miekg/coredns/middleware"
"github.com/miekg/coredns/middleware/kubernetes"
k8sc "github.com/miekg/coredns/middleware/kubernetes/k8sclient"
+ "github.com/miekg/coredns/middleware/kubernetes/nametemplate"
"github.com/miekg/coredns/middleware/proxy"
-// "github.com/miekg/coredns/middleware/singleflight"
+ //"github.com/miekg/coredns/middleware/singleflight"
"golang.org/x/net/context"
)
-const defaultK8sEndpoint = "http://localhost:8080"
+const (
+ defaultK8sEndpoint = "http://localhost:8080"
+ defaultNameTemplate = "{service}.{namespace}.{zone}"
+)
// Kubernetes sets up the kubernetes middleware.
func Kubernetes(c *Controller) (middleware.Middleware, error) {
- fmt.Println("controller %v", c)
- // TODO: Determine if subzone support required
+ fmt.Println("controller %v", c)
+ // TODO: Determine if subzone support required
kubernetes, err := kubernetesParse(c)
@@ -39,29 +44,40 @@ func Kubernetes(c *Controller) (middleware.Middleware, error) {
func kubernetesParse(c *Controller) (kubernetes.Kubernetes, error) {
- /*
- * TODO: Remove unused state and simplify.
- * Inflight and Ctx might not be needed. Leaving in place until
- * we take a pass at API caching and optimizing connector to the
- * k8s API. Single flight (or limited upper-bound) for inflight
- * API calls may be desirable.
- */
+ /*
+ * TODO: Remove unused state and simplify.
+ * Inflight and Ctx might not be needed. Leaving in place until
+ * we take a pass at API caching and optimizing connector to the
+ * k8s API. Single flight (or limited upper-bound) for inflight
+ * API calls may be desirable.
+ */
k8s := kubernetes.Kubernetes{
- Proxy: proxy.New([]string{}),
- Ctx: context.Background(),
-// Inflight: &singleflight.Group{},
- APIConn: nil,
+ Proxy: proxy.New([]string{}),
+ Ctx: context.Background(),
+ // Inflight: &singleflight.Group{},
}
var (
- endpoints = []string{defaultK8sEndpoint}
+ endpoints = []string{defaultK8sEndpoint}
+ template = defaultNameTemplate
+ namespaces = []string{}
)
+
+ k8s.APIConn = k8sc.NewK8sConnector(endpoints[0])
+ k8s.NameTemplate = new(nametemplate.NameTemplate)
+ k8s.NameTemplate.SetTemplate(template)
+
for c.Next() {
if c.Val() == "kubernetes" {
- k8s.Zones = c.RemainingArgs()
- if len(k8s.Zones) == 0 {
+ zones := c.RemainingArgs()
+
+ if len(zones) == 0 {
k8s.Zones = c.ServerBlockHosts
+ } else {
+ // Normalize requested zones
+ k8s.Zones = kubernetes.NormalizeZoneList(zones)
}
+
middleware.Zones(k8s.Zones).FullyQualify()
if c.NextBlock() {
// TODO(miek): 2 switches?
@@ -72,22 +88,33 @@ func kubernetesParse(c *Controller) (kubernetes.Kubernetes, error) {
return kubernetes.Kubernetes{}, c.ArgErr()
}
endpoints = args
- k8s.APIConn = k8sc.NewK8sConnector(endpoints[0])
+ k8s.APIConn = k8sc.NewK8sConnector(endpoints[0])
}
for c.Next() {
switch c.Val() {
- case "endpoint":
+ case "template":
+ args := c.RemainingArgs()
+ if len(args) == 0 {
+ return kubernetes.Kubernetes{}, c.ArgErr()
+ }
+ template = strings.Join(args, "")
+ err := k8s.NameTemplate.SetTemplate(template)
+ if err != nil {
+ return kubernetes.Kubernetes{}, err
+ }
+ case "namespaces":
args := c.RemainingArgs()
if len(args) == 0 {
return kubernetes.Kubernetes{}, c.ArgErr()
}
- endpoints = args
+ namespaces = args
+ k8s.Namespaces = &namespaces
}
}
}
return k8s, nil
}
- fmt.Println("endpoints='%v'", endpoints)
}
+ fmt.Println("here before return")
return kubernetes.Kubernetes{}, nil
}