Refactor to use Weave's docker client and watcher
This commit is contained in:
1 parent
068bbe0837
commit
bd2b8df7c5
6 files changed
+25
-42
No files matched your search
@@ -80,3 +80,16 @@ func (c *Client) IsContainerNotRunning(idStr string) bool {
|
||||
Log.Errorf("[docker] Could not check container status: %s", err)
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *Client) GetContainerBridgeIP(nameOrID string) (string, error) {
|
||||
Log.Debugf("Getting IP for container %s", nameOrID)
|
||||
info, err := c.InspectContainer(nameOrID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return info.NetworkSettings.IPAddress, nil
|
||||
}
|
||||
|
||||
func (c *Client) InspectContainer(nameOrId string) (*docker.Container, error) {
|
||||
return c.Client.InspectContainer(nameOrId)
|
||||
}
|
||||
+2
-2
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func (d *dockerer) registerWithDNS(ID string, fqdn string, ip string) error {
|
||||
dnsip, err := d.getContainerBridgeIP(WeaveDNSContainer)
|
||||
dnsip, err := d.client.GetContainerBridgeIP(WeaveContainer)
|
||||
if err != nil {
|
||||
return fmt.Errorf("nameserver not available: %s", err)
|
||||
}
|
||||
@@ -33,7 +33,7 @@ func (d *dockerer) registerWithDNS(ID string, fqdn string, ip string) error {
|
||||
}
|
||||
|
||||
func (d *dockerer) deregisterWithDNS(ID string, ip string) error {
|
||||
dnsip, err := d.getContainerBridgeIP(WeaveDNSContainer)
|
||||
dnsip, err := d.client.GetContainerBridgeIP(WeaveContainer)
|
||||
if err != nil {
|
||||
return fmt.Errorf("nameserver not available: %s", err)
|
||||
}
|
||||
|
||||
+1
-15
@@ -1,23 +1,9 @@
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"github.com/fsouza/go-dockerclient"
|
||||
. "github.com/weaveworks/weave/common"
|
||||
"github.com/weaveworks/weave/common/docker"
|
||||
)
|
||||
|
||||
type dockerer struct {
|
||||
client *docker.Client
|
||||
}
|
||||
|
||||
func (d *dockerer) getContainerBridgeIP(nameOrID string) (string, error) {
|
||||
Log.Debugf("Getting IP for container %s", nameOrID)
|
||||
info, err := d.InspectContainer(nameOrID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return info.NetworkSettings.IPAddress, nil
|
||||
}
|
||||
|
||||
func (d *dockerer) InspectContainer(nameOrId string) (*docker.Container, error) {
|
||||
return d.client.InspectContainer(nameOrId)
|
||||
}
|
||||
+1
-1
@@ -7,10 +7,10 @@ import (
|
||||
"github.com/docker/libnetwork/types"
|
||||
|
||||
. "github.com/weaveworks/weave/common"
|
||||
"github.com/weaveworks/weave/common/docker"
|
||||
"github.com/weaveworks/weave/common/odp"
|
||||
"github.com/weaveworks/weave/plugin/skel"
|
||||
|
||||
docker "github.com/fsouza/go-dockerclient"
|
||||
"github.com/vishvananda/netlink"
|
||||
)
|
||||
|
||||
|
||||
+2
-2
@@ -10,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
func (d *dockerer) ipamOp(ID string, op string) (*net.IPNet, error) {
|
||||
weaveip, err := d.getContainerBridgeIP(WeaveContainer)
|
||||
weaveip, err := d.client.GetContainerBridgeIP(WeaveContainer)
|
||||
Log.Debugf("IPAM operation %s for %s", op, ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -52,7 +52,7 @@ func (d *dockerer) lookupIP(ID string) (*net.IPNet, error) {
|
||||
|
||||
// release an IP which is no longer needed
|
||||
func (d *dockerer) releaseIP(ID string) error {
|
||||
weaveip, err := d.getContainerBridgeIP(WeaveContainer)
|
||||
weaveip, err := d.client.GetContainerBridgeIP(WeaveContainer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+6
-22
@@ -4,19 +4,16 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/fsouza/go-dockerclient"
|
||||
. "github.com/weaveworks/weave/common"
|
||||
"github.com/weaveworks/weave/common/docker"
|
||||
)
|
||||
|
||||
const (
|
||||
WeaveDNSContainer = "weavedns"
|
||||
WeaveDomain = "weave.local"
|
||||
WeaveDomain = "weave.local"
|
||||
)
|
||||
|
||||
type watcher struct {
|
||||
dockerer
|
||||
networks map[string]bool
|
||||
events chan *docker.APIEvents
|
||||
}
|
||||
|
||||
type Watcher interface {
|
||||
@@ -27,31 +24,18 @@ func NewWatcher(client *docker.Client) (Watcher, error) {
|
||||
dockerer: dockerer{
|
||||
client: client,
|
||||
},
|
||||
networks: make(map[string]bool),
|
||||
events: make(chan *docker.APIEvents),
|
||||
}
|
||||
err := client.AddEventListener(w.events)
|
||||
err := client.AddObserver(w)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
go func() {
|
||||
for event := range w.events {
|
||||
switch event.Status {
|
||||
case "start":
|
||||
w.ContainerStart(event.ID)
|
||||
case "die":
|
||||
w.ContainerDied(event.ID)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return w, nil
|
||||
}
|
||||
|
||||
func (w *watcher) ContainerStart(id string) {
|
||||
func (w *watcher) ContainerStarted(id string) {
|
||||
Log.Debugf("Container started %s", id)
|
||||
info, err := w.InspectContainer(id)
|
||||
info, err := w.client.InspectContainer(id)
|
||||
if err != nil {
|
||||
Log.Warningf("error inspecting container: %s", err)
|
||||
return
|
||||
@@ -69,7 +53,7 @@ func (w *watcher) ContainerStart(id string) {
|
||||
|
||||
func (w *watcher) ContainerDied(id string) {
|
||||
Log.Debugf("Container died %s", id)
|
||||
info, err := w.InspectContainer(id)
|
||||
info, err := w.client.InspectContainer(id)
|
||||
if err != nil {
|
||||
Log.Warningf("error inspecting container: %s", err)
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user