Move to logging package (#191)
* Updating comment to remove references to Caddy * Updating README to mark TODO items complete * Changing all debug print statements over to use logging package
This commit is contained in:
parent
3f4ec783d2
commit
3ba86f2421
9 changed files with 40 additions and 53 deletions
|
@ -1,4 +1,4 @@
|
||||||
// Package caddy implements the CoreDNS web server as a service
|
// Package core implements the CoreDNS web server as a service
|
||||||
// in your own Go programs.
|
// in your own Go programs.
|
||||||
//
|
//
|
||||||
// To use this package, follow a few simple steps:
|
// To use this package, follow a few simple steps:
|
||||||
|
@ -7,10 +7,10 @@
|
||||||
// 2. Call LoadCorefile() to get the Corefile (it
|
// 2. Call LoadCorefile() to get the Corefile (it
|
||||||
// might have been piped in as part of a restart).
|
// might have been piped in as part of a restart).
|
||||||
// You should pass in your own Corefile loader.
|
// You should pass in your own Corefile loader.
|
||||||
// 3. Call caddy.Start() to start CoreDNS, caddy.Stop()
|
// 3. Call core.Start() to start CoreDNS, core.Stop()
|
||||||
// to stop it, or caddy.Restart() to restart it.
|
// to stop it, or core.Restart() to restart it.
|
||||||
//
|
//
|
||||||
// You should use caddy.Wait() to wait for all CoreDNS servers
|
// You should use core.Wait() to wait for all CoreDNS servers
|
||||||
// to quit before your process exits.
|
// to quit before your process exits.
|
||||||
package core
|
package core
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ package setup
|
||||||
import (
|
import (
|
||||||
//"crypto/tls"
|
//"crypto/tls"
|
||||||
//"crypto/x509"
|
//"crypto/x509"
|
||||||
"fmt"
|
"log"
|
||||||
//"io/ioutil"
|
//"io/ioutil"
|
||||||
//"net"
|
//"net"
|
||||||
//"net/http"
|
//"net/http"
|
||||||
|
@ -27,7 +27,7 @@ const (
|
||||||
|
|
||||||
// Kubernetes sets up the kubernetes middleware.
|
// Kubernetes sets up the kubernetes middleware.
|
||||||
func Kubernetes(c *Controller) (middleware.Middleware, error) {
|
func Kubernetes(c *Controller) (middleware.Middleware, error) {
|
||||||
fmt.Println("controller %v", c)
|
log.Printf("[debug] controller %v\n", c)
|
||||||
// TODO: Determine if subzone support required
|
// TODO: Determine if subzone support required
|
||||||
|
|
||||||
kubernetes, err := kubernetesParse(c)
|
kubernetes, err := kubernetesParse(c)
|
||||||
|
@ -115,6 +115,5 @@ func kubernetesParse(c *Controller) (kubernetes.Kubernetes, error) {
|
||||||
return k8s, nil
|
return k8s, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Println("here before return")
|
|
||||||
return kubernetes.Kubernetes{}, nil
|
return kubernetes.Kubernetes{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -255,7 +255,7 @@ TBD:
|
||||||
* Do wildcards search across namespaces? (Yes)
|
* Do wildcards search across namespaces? (Yes)
|
||||||
* Initial implementation assumes that a namespace maps to the first DNS label
|
* Initial implementation assumes that a namespace maps to the first DNS label
|
||||||
below the zone managed by the kubernetes middleware. This assumption may
|
below the zone managed by the kubernetes middleware. This assumption may
|
||||||
need to be revised.
|
need to be revised. (Template scheme for record names removes this assumption.)
|
||||||
|
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
@ -280,12 +280,13 @@ TBD:
|
||||||
* Calculate SRV priority based on number of instances running.
|
* Calculate SRV priority based on number of instances running.
|
||||||
(See SkyDNS README.md)
|
(See SkyDNS README.md)
|
||||||
* Functional work
|
* Functional work
|
||||||
* Implement wildcard-based lookup. Minimally support `*`, consider `?` as well.
|
* (done) ~~Implement wildcard-based lookup. Minimally support `*`, consider `?` as well.~~
|
||||||
* Note from Miek on PR 181: "SkyDNS also supports the word `any`.
|
* (done) ~~Note from Miek on PR 181: "SkyDNS also supports the word `any`.~~
|
||||||
* Implement SkyDNS-style synthetic zones such as "svc" to group k8s objects. (This
|
* Implement SkyDNS-style synthetic zones such as "svc" to group k8s objects. (This
|
||||||
should be optional behavior.) Also look at "pod" synthetic zones.
|
should be optional behavior.) Also look at "pod" synthetic zones.
|
||||||
* Implement test cases for SkyDNS equivalent functionality.
|
* Implement test cases for SkyDNS equivalent functionality.
|
||||||
* SkyDNS functionality, as listed in SkyDNS README: https://github.com/kubernetes/kubernetes/blob/release-1.2/cluster/addons/dns/README.md
|
* SkyDNS functionality, as listed in SkyDNS README: https://github.com/kubernetes/kubernetes/blob/release-1.2/cluster/addons/dns/README.md
|
||||||
|
* Expose pods and srv objects.
|
||||||
* A records in form of `pod-ip-address.my-namespace.cluster.local`.
|
* A records in form of `pod-ip-address.my-namespace.cluster.local`.
|
||||||
For example, a pod with ip `1.2.3.4` in the namespace `default`
|
For example, a pod with ip `1.2.3.4` in the namespace `default`
|
||||||
with a dns name of `cluster.local` would have an entry:
|
with a dns name of `cluster.local` would have an entry:
|
||||||
|
|
|
@ -2,6 +2,7 @@ package kubernetes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
"github.com/miekg/coredns/middleware"
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
|
@ -10,7 +11,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||||
fmt.Printf("[debug] here entering ServeDNS: ctx:%v dnsmsg:%v\n", ctx, r)
|
log.Printf("[debug] here entering ServeDNS: ctx:%v dnsmsg:%v\n", ctx, r)
|
||||||
|
|
||||||
state := middleware.State{W: w, Req: r}
|
state := middleware.State{W: w, Req: r}
|
||||||
if state.QClass() != dns.ClassINET {
|
if state.QClass() != dns.ClassINET {
|
||||||
|
|
|
@ -2,7 +2,7 @@ package k8sclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
@ -55,7 +55,7 @@ func (c *K8sConnector) GetResourceList() (*ResourceList, error) {
|
||||||
err := parseJson(url, resources)
|
err := parseJson(url, resources)
|
||||||
// TODO: handle no response from k8s
|
// TODO: handle no response from k8s
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[ERROR] Response from kubernetes API for GetResourceList() is: %v\n", err)
|
log.Printf("[ERROR] Response from kubernetes API for GetResourceList() is: %v\n", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ func (c *K8sConnector) GetNamespaceList() (*NamespaceList, error) {
|
||||||
url := makeURL([]string{c.baseURL, apiBase, apiNamespaces})
|
url := makeURL([]string{c.baseURL, apiBase, apiNamespaces})
|
||||||
err := parseJson(url, namespaces)
|
err := parseJson(url, namespaces)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[ERROR] Response from kubernetes API for GetNamespaceList() is: %v\n", err)
|
log.Printf("[ERROR] Response from kubernetes API for GetNamespaceList() is: %v\n", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ func (c *K8sConnector) GetServiceList() (*ServiceList, error) {
|
||||||
err := parseJson(url, services)
|
err := parseJson(url, services)
|
||||||
// TODO: handle no response from k8s
|
// TODO: handle no response from k8s
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[ERROR] Response from kubernetes API for GetServiceList() is: %v\n", err)
|
log.Printf("[ERROR] Response from kubernetes API for GetServiceList() is: %v\n", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ func (c *K8sConnector) GetServicesByNamespace() (map[string][]ServiceItem, error
|
||||||
k8sServiceList, err := c.GetServiceList()
|
k8sServiceList, err := c.GetServiceList()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[ERROR] Getting service list produced error: %v", err)
|
log.Printf("[ERROR] Getting service list produced error: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ package kubernetes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/miekg/coredns/middleware"
|
"github.com/miekg/coredns/middleware"
|
||||||
|
@ -62,20 +62,9 @@ func (g Kubernetes) Records(name string, exact bool) ([]msg.Service, error) {
|
||||||
typeName string
|
typeName string
|
||||||
)
|
)
|
||||||
|
|
||||||
fmt.Println("[debug] enter Records('", name, "', ", exact, ")")
|
log.Printf("[debug] enter Records('%v', '%v')\n", name, exact)
|
||||||
zone, serviceSegments := g.getZoneForName(name)
|
zone, serviceSegments := g.getZoneForName(name)
|
||||||
|
|
||||||
/*
|
|
||||||
// For initial implementation, assume namespace is first serviceSegment
|
|
||||||
// and service name is remaining segments.
|
|
||||||
serviceSegLen := len(serviceSegments)
|
|
||||||
if serviceSegLen >= 2 {
|
|
||||||
namespace = serviceSegments[serviceSegLen-1]
|
|
||||||
serviceName = strings.Join(serviceSegments[:serviceSegLen-1], ".")
|
|
||||||
}
|
|
||||||
// else we are looking up the zone. So handle the NS, SOA records etc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TODO: Implementation above globbed together segments for the serviceName if
|
// TODO: Implementation above globbed together segments for the serviceName if
|
||||||
// multiple segments remained. Determine how to do similar globbing using
|
// multiple segments remained. Determine how to do similar globbing using
|
||||||
// the template-based implementation.
|
// the template-based implementation.
|
||||||
|
@ -85,22 +74,22 @@ func (g Kubernetes) Records(name string, exact bool) ([]msg.Service, error) {
|
||||||
|
|
||||||
if namespace == "" {
|
if namespace == "" {
|
||||||
err := errors.New("Parsing query string did not produce a namespace value. Assuming wildcard namespace.")
|
err := errors.New("Parsing query string did not produce a namespace value. Assuming wildcard namespace.")
|
||||||
fmt.Printf("[WARN] %v\n", err)
|
log.Printf("[WARN] %v\n", err)
|
||||||
namespace = util.WildcardStar
|
namespace = util.WildcardStar
|
||||||
}
|
}
|
||||||
|
|
||||||
if serviceName == "" {
|
if serviceName == "" {
|
||||||
err := errors.New("Parsing query string did not produce a serviceName value. Assuming wildcard serviceName.")
|
err := errors.New("Parsing query string did not produce a serviceName value. Assuming wildcard serviceName.")
|
||||||
fmt.Printf("[WARN] %v\n", err)
|
log.Printf("[WARN] %v\n", err)
|
||||||
serviceName = util.WildcardStar
|
serviceName = util.WildcardStar
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("[debug] exact: ", exact)
|
log.Printf("[debug] exact: %v\n", exact)
|
||||||
fmt.Println("[debug] zone: ", zone)
|
log.Printf("[debug] zone: %v\n", zone)
|
||||||
fmt.Println("[debug] servicename: ", serviceName)
|
log.Printf("[debug] servicename: %v\n", serviceName)
|
||||||
fmt.Println("[debug] namespace: ", namespace)
|
log.Printf("[debug] namespace: %v\n", namespace)
|
||||||
fmt.Println("[debug] typeName: ", typeName)
|
log.Printf("[debug] typeName: %v\n", typeName)
|
||||||
fmt.Println("[debug] APIconn: ", g.APIConn)
|
log.Printf("[debug] APIconn: %v\n", g.APIConn)
|
||||||
|
|
||||||
nsWildcard := util.SymbolContainsWildcard(namespace)
|
nsWildcard := util.SymbolContainsWildcard(namespace)
|
||||||
serviceWildcard := util.SymbolContainsWildcard(serviceName)
|
serviceWildcard := util.SymbolContainsWildcard(serviceName)
|
||||||
|
@ -108,14 +97,14 @@ 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
|
// 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.
|
// Case where namespace contains a wildcard is handled in Get(...) method.
|
||||||
if (!nsWildcard) && (g.Namespaces != nil && !util.StringInSlice(namespace, *g.Namespaces)) {
|
if (!nsWildcard) && (g.Namespaces != nil && !util.StringInSlice(namespace, *g.Namespaces)) {
|
||||||
fmt.Printf("[debug] Namespace '%v' is not published by Corefile\n", namespace)
|
log.Printf("[debug] Namespace '%v' is not published by Corefile\n", namespace)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
k8sItems, err := g.Get(namespace, nsWildcard, serviceName, serviceWildcard)
|
k8sItems, err := g.Get(namespace, nsWildcard, serviceName, serviceWildcard)
|
||||||
fmt.Println("[debug] k8s items:", k8sItems)
|
log.Printf("[debug] k8s items: %v\n", k8sItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[ERROR] Got error while looking up ServiceItems. Error is: %v\n", err)
|
log.Printf("[ERROR] Got error while looking up ServiceItems. Error is: %v\n", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if k8sItems == nil {
|
if k8sItems == nil {
|
||||||
|
@ -133,7 +122,7 @@ func (g Kubernetes) getRecordsForServiceItems(serviceItems []k8sc.ServiceItem, v
|
||||||
|
|
||||||
for _, item := range serviceItems {
|
for _, item := range serviceItems {
|
||||||
clusterIP := item.Spec.ClusterIP
|
clusterIP := item.Spec.ClusterIP
|
||||||
fmt.Println("[debug] clusterIP:", clusterIP)
|
log.Printf("[debug] clusterIP: %v\n", clusterIP)
|
||||||
|
|
||||||
// Create records by constructing record name from template...
|
// Create records by constructing record name from template...
|
||||||
//values.Namespace = item.Metadata.Namespace
|
//values.Namespace = item.Metadata.Namespace
|
||||||
|
@ -143,13 +132,13 @@ func (g Kubernetes) getRecordsForServiceItems(serviceItems []k8sc.ServiceItem, v
|
||||||
|
|
||||||
// Create records for each exposed port...
|
// Create records for each exposed port...
|
||||||
for _, p := range item.Spec.Ports {
|
for _, p := range item.Spec.Ports {
|
||||||
fmt.Println("[debug] port:", p.Port)
|
log.Printf("[debug] port: %v\n", p.Port)
|
||||||
s := msg.Service{Host: clusterIP, Port: p.Port}
|
s := msg.Service{Host: clusterIP, Port: p.Port}
|
||||||
records = append(records, s)
|
records = append(records, s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("[debug] records from getRecordsForServiceItems(): %v\n", records)
|
log.Printf("[debug] records from getRecordsForServiceItems(): %v\n", records)
|
||||||
return records
|
return records
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +147,7 @@ func (g Kubernetes) Get(namespace string, nsWildcard bool, servicename string, s
|
||||||
serviceList, err := g.APIConn.GetServiceList()
|
serviceList, err := g.APIConn.GetServiceList()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[ERROR] Getting service list produced error: %v", err)
|
log.Printf("[ERROR] Getting service list produced error: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +158,7 @@ func (g Kubernetes) Get(namespace string, nsWildcard bool, servicename string, s
|
||||||
// If namespace has a wildcard, filter results against Corefile namespace list.
|
// If namespace has a wildcard, filter results against Corefile namespace list.
|
||||||
// (Namespaces without a wildcard were filtered before the call to this function.)
|
// (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 && (g.Namespaces != nil && !util.StringInSlice(item.Metadata.Namespace, *g.Namespaces)) {
|
||||||
fmt.Printf("[debug] Namespace '%v' is not published by Corefile\n", item.Metadata.Namespace)
|
log.Printf("[debug] Namespace '%v' is not published by Corefile\n", item.Metadata.Namespace)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
resultItems = append(resultItems, item)
|
resultItems = append(resultItems, item)
|
||||||
|
|
|
@ -2,7 +2,7 @@ package nametemplate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/miekg/coredns/middleware/kubernetes/util"
|
"github.com/miekg/coredns/middleware/kubernetes/util"
|
||||||
|
@ -65,7 +65,6 @@ type NameTemplate struct {
|
||||||
|
|
||||||
func (t *NameTemplate) SetTemplate(s string) error {
|
func (t *NameTemplate) SetTemplate(s string) error {
|
||||||
var err error
|
var err error
|
||||||
fmt.Println()
|
|
||||||
|
|
||||||
t.Element = map[string]int{}
|
t.Element = map[string]int{}
|
||||||
|
|
||||||
|
@ -83,10 +82,10 @@ func (t *NameTemplate) SetTemplate(s string) error {
|
||||||
if !elementPositionSet {
|
if !elementPositionSet {
|
||||||
if strings.Contains(v, "{") {
|
if strings.Contains(v, "{") {
|
||||||
err = errors.New("Record name template contains the unknown symbol '" + v + "'")
|
err = errors.New("Record name template contains the unknown symbol '" + v + "'")
|
||||||
fmt.Printf("[debug] %v\n", err)
|
log.Printf("[debug] %v\n", err)
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("[debug] Template string has static element '%v'\n", v)
|
log.Printf("[debug] Template string has static element '%v'\n", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package nametemplate
|
package nametemplate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -21,7 +20,6 @@ var exampleTemplates = map[string][]int{
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSetTemplate(t *testing.T) {
|
func TestSetTemplate(t *testing.T) {
|
||||||
fmt.Printf("\n")
|
|
||||||
for s, expectedValue := range exampleTemplates {
|
for s, expectedValue := range exampleTemplates {
|
||||||
|
|
||||||
n := new(NameTemplate)
|
n := new(NameTemplate)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package kubernetes
|
package kubernetes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"log"
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
@ -24,7 +24,7 @@ func NormalizeZoneList(zones []string) []string {
|
||||||
for _, z := range zones {
|
for _, z := range zones {
|
||||||
zoneConflict, _ := subzoneConflict(filteredZones, z)
|
zoneConflict, _ := subzoneConflict(filteredZones, z)
|
||||||
if zoneConflict {
|
if zoneConflict {
|
||||||
fmt.Printf("[WARN] new zone '%v' from Corefile conflicts with existing zones: %v\n Ignoring zone '%v'\n", z, filteredZones, z)
|
log.Printf("[WARN] new zone '%v' from Corefile conflicts with existing zones: %v\n Ignoring zone '%v'\n", z, filteredZones, z)
|
||||||
} else {
|
} else {
|
||||||
filteredZones = append(filteredZones, z)
|
filteredZones = append(filteredZones, z)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue