From 68096b0437f2afe52b29452f9e6122ead1b11eea Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 1 Apr 2015 16:47:55 +0100 Subject: [PATCH] Generalize updater.go --- {nameserver => common/updater}/updater.go | 15 +++++++++------ nameserver/zone.go | 5 +++++ weavedns/main.go | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) rename {nameserver => common/updater}/updater.go (69%) diff --git a/nameserver/updater.go b/common/updater/updater.go similarity index 69% rename from nameserver/updater.go rename to common/updater/updater.go index 45725395..f46944cb 100644 --- a/nameserver/updater.go +++ b/common/updater/updater.go @@ -1,10 +1,14 @@ -package nameserver +package updater import ( "github.com/fsouza/go-dockerclient" . "github.com/zettio/weave/common" ) +type ContainerObserver interface { + ContainerDied(ident string) error +} + func checkError(err error, apiPath string) { if err != nil { Error.Fatalf("[updater] Unable to connect to Docker API on %s: %s", @@ -12,7 +16,7 @@ func checkError(err error, apiPath string) { } } -func StartUpdater(apiPath string, zone Zone) error { +func Start(apiPath string, ob ContainerObserver) error { client, err := docker.NewClient(apiPath) checkError(err, apiPath) @@ -27,18 +31,17 @@ func StartUpdater(apiPath string, zone Zone) error { go func() { for event := range events { - handleEvent(zone, event, client) + handleEvent(ob, event, client) } }() return nil } -func handleEvent(zone Zone, event *docker.APIEvents, client *docker.Client) error { +func handleEvent(ob ContainerObserver, event *docker.APIEvents, client *docker.Client) error { switch event.Status { case "die": id := event.ID - Info.Printf("[updater] Container %s down. Removing records", id) - zone.DeleteRecordsFor(id) + ob.ContainerDied(id) } return nil } diff --git a/nameserver/zone.go b/nameserver/zone.go index c63fe7b4..27b9ea47 100644 --- a/nameserver/zone.go +++ b/nameserver/zone.go @@ -139,3 +139,8 @@ func (zone *ZoneDb) DeleteRecordsFor(ident string) error { zone.recs = zone.recs[:w] return nil } + +func (zone *ZoneDb) ContainerDied(ident string) error { + Info.Printf("[zonedb] Container %s down. Removing records", ident) + return zone.DeleteRecordsFor(ident) +} diff --git a/weavedns/main.go b/weavedns/main.go index 66b68021..7c239e0c 100644 --- a/weavedns/main.go +++ b/weavedns/main.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" . "github.com/zettio/weave/common" + "github.com/zettio/weave/common/updater" weavedns "github.com/zettio/weave/nameserver" weavenet "github.com/zettio/weave/net" "io" @@ -57,7 +58,7 @@ func main() { var zone = new(weavedns.ZoneDb) if watch { - err := weavedns.StartUpdater(apiPath, zone) + err := updater.Start(apiPath, zone) if err != nil { Error.Fatal("Unable to start watcher", err) }