From c409b71552a246303cf980101f1e8e424aad3984 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 14 Apr 2015 12:13:13 +0000 Subject: [PATCH 1/3] Small fix for network test script --- daemon/network/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/network/test.sh b/daemon/network/test.sh index d3f0476cc94b4..b3e6f4e013df4 100755 --- a/daemon/network/test.sh +++ b/daemon/network/test.sh @@ -2,7 +2,7 @@ set -eux -docker rm $(docker ps -a -q) +docker rm $(docker ps -a -q) || true CONTAINER=$(docker create ubuntu) NETWORK=$(docker net create --driver=noop) docker net plug $CONTAINER $NETWORK From c3c2dd83df64c7172742770f1fec980112266c77 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 14 Apr 2015 12:21:52 +0000 Subject: [PATCH 2/3] Network extensions: fix labels marshalling --- api/server/server.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/api/server/server.go b/api/server/server.go index b399bcc0e7b8b..299bc11852dfc 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -1126,12 +1126,21 @@ func getLabels(body map[string]interface{}) (map[string]string, error) { return nil, fmt.Errorf("Must specify Labels") } - value, ok := inf.(map[string]string) + value, ok := inf.(map[string]interface{}) if !ok { return nil, fmt.Errorf("Labels must be a map[string]string") } - return value, nil + result := make(map[string]string) + for k, v := range value { + val, ok := v.(string) + if !ok { + return nil, fmt.Errorf("Labels must be a map[string]string") + } + result[k] = val + } + + return result, nil } func postNetworkCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error { From 4e827b14ae782393b112701e1798df290fef04d5 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 14 Apr 2015 13:16:21 +0000 Subject: [PATCH 3/3] Plug through labels on docker net plug --- api/server/server.go | 15 ++++++++++++--- daemon/network.go | 9 +++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/api/server/server.go b/api/server/server.go index 299bc11852dfc..f03865cab6d29 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -1152,8 +1152,7 @@ func postNetworkCreate(eng *engine.Engine, version version.Version, w http.Respo } body := make(map[string]interface{}) - decoder := json.NewDecoder(r.Body) - if err := decoder.Decode(&body); err != nil { + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { return err } @@ -1183,8 +1182,18 @@ func postNetworkPlug(eng *engine.Engine, version version.Version, w http.Respons return err } + body := make(map[string]interface{}) + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + return err + } + + labels, err := getLabels(body) + if err != nil { + return err + } + d := getDaemon(eng) - id, err := d.NetworkPlug(vars["name"], vars["network"]) + id, err := d.NetworkPlug(vars["name"], vars["network"], labels) if err != nil { return err } diff --git a/daemon/network.go b/daemon/network.go index f00a0ac13539f..1fa9049cfc3d5 100644 --- a/daemon/network.go +++ b/daemon/network.go @@ -95,7 +95,7 @@ func (daemon *Daemon) NetworkDestroy(id string) error { return nil } -func (daemon *Daemon) endpointOnNetwork(namesOrId string) (*Endpoint, error) { +func (daemon *Daemon) endpointOnNetwork(namesOrId string, labels map[string]string) (*Endpoint, error) { net := daemon.networks.Get(namesOrId) if net == nil { return nil, fmt.Errorf("Network '%s' not found", namesOrId) @@ -104,13 +104,14 @@ func (daemon *Daemon) endpointOnNetwork(namesOrId string) (*Endpoint, error) { return &Endpoint{ ID: stringid.GenerateRandomID(), Network: net.ID, + Labels: labels, }, nil } func (daemon *Daemon) endpointsOnNetworks(namesOrIds []string) ([]*Endpoint, error) { var result []*Endpoint for _, nameOrId := range namesOrIds { - endpoint, err := daemon.endpointOnNetwork(nameOrId) + endpoint, err := daemon.endpointOnNetwork(nameOrId, nil) if err != nil { return nil, err } @@ -119,7 +120,7 @@ func (daemon *Daemon) endpointsOnNetworks(namesOrIds []string) ([]*Endpoint, err return result, nil } -func (daemon *Daemon) NetworkPlug(containerID, nameOrId string) (string, error) { +func (daemon *Daemon) NetworkPlug(containerID, nameOrId string, labels map[string]string) (string, error) { daemon.networks.Lock() defer daemon.networks.Unlock() @@ -132,7 +133,7 @@ func (daemon *Daemon) NetworkPlug(containerID, nameOrId string) (string, error) return "", fmt.Errorf("Cannot plug in running container (yet)") } - endpoint, err := daemon.endpointOnNetwork(nameOrId) + endpoint, err := daemon.endpointOnNetwork(nameOrId, labels) if err != nil { return "", err }