Browse Source

Persist ipam driver options

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch 9 years ago
parent
commit
865951c6e8
2 changed files with 25 additions and 1 deletions
  1. 8 1
      libnetwork/libnetwork_internal_test.go
  2. 17 0
      libnetwork/network.go

+ 8 - 1
libnetwork/libnetwork_internal_test.go

@@ -70,6 +70,7 @@ func TestNetworkMarshalling(t *testing.T) {
 		persist:     true,
 		ipamOptions: map[string]string{
 			netlabel.MacAddress: "a:b:c:d:e:f",
+			"primary":           "",
 		},
 		ipamV4Config: []*IpamConf{
 			{
@@ -153,6 +154,10 @@ func TestNetworkMarshalling(t *testing.T) {
 				},
 			},
 		},
+		labels: map[string]string{
+			"color":        "blue",
+			"superimposed": "",
+		},
 	}
 
 	b, err := json.Marshal(n)
@@ -170,7 +175,9 @@ func TestNetworkMarshalling(t *testing.T) {
 		n.addrSpace != nn.addrSpace || n.enableIPv6 != nn.enableIPv6 ||
 		n.persist != nn.persist || !compareIpamConfList(n.ipamV4Config, nn.ipamV4Config) ||
 		!compareIpamInfoList(n.ipamV4Info, nn.ipamV4Info) || !compareIpamConfList(n.ipamV6Config, nn.ipamV6Config) ||
-		!compareIpamInfoList(n.ipamV6Info, nn.ipamV6Info) {
+		!compareIpamInfoList(n.ipamV6Info, nn.ipamV6Info) ||
+		!compareStringMaps(n.ipamOptions, nn.ipamOptions) ||
+		!compareStringMaps(n.labels, nn.labels) {
 		t.Fatalf("JSON marsh/unmarsh failed."+
 			"\nOriginal:\n%#v\nDecoded:\n%#v"+
 			"\nOriginal ipamV4Conf: %#v\n\nDecoded ipamV4Conf: %#v"+

+ 17 - 0
libnetwork/network.go

@@ -320,6 +320,13 @@ func (n *network) CopyTo(o datastore.KVObject) error {
 		dstN.labels[k] = v
 	}
 
+	if n.ipamOptions != nil {
+		dstN.ipamOptions = make(map[string]string, len(n.ipamOptions))
+		for k, v := range n.ipamOptions {
+			dstN.ipamOptions[k] = v
+		}
+	}
+
 	for _, v4conf := range n.ipamV4Config {
 		dstV4Conf := &IpamConf{}
 		v4conf.CopyTo(dstV4Conf)
@@ -372,6 +379,7 @@ func (n *network) MarshalJSON() ([]byte, error) {
 	netMap["scope"] = n.scope
 	netMap["labels"] = n.labels
 	netMap["ipamType"] = n.ipamType
+	netMap["ipamOptions"] = n.ipamOptions
 	netMap["addrSpace"] = n.addrSpace
 	netMap["enableIPv6"] = n.enableIPv6
 	if n.generic != nil {
@@ -432,6 +440,15 @@ func (n *network) UnmarshalJSON(b []byte) (err error) {
 		}
 	}
 
+	if v, ok := netMap["ipamOptions"]; ok {
+		if iOpts, ok := v.(map[string]interface{}); ok {
+			n.ipamOptions = make(map[string]string, len(iOpts))
+			for k, v := range iOpts {
+				n.ipamOptions[k] = v.(string)
+			}
+		}
+	}
+
 	if v, ok := netMap["generic"]; ok {
 		n.generic = v.(map[string]interface{})
 		// Restore opts in their map[string]string form