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:
Michael Richmond 2016-07-18 10:47:36 -07:00 committed by Miek Gieben
parent 3f4ec783d2
commit 3ba86f2421
9 changed files with 40 additions and 53 deletions

View file

@ -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

View file

@ -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
} }

View file

@ -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:

View file

@ -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 {

View file

@ -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
} }

View file

@ -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)

View file

@ -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)
} }
} }
} }

View file

@ -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)

View file

@ -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)
} }