diff --git a/libnetwork/libnetwork_internal_test.go b/libnetwork/libnetwork_internal_test.go index c2e008ad44..b62e43bc39 100644 --- a/libnetwork/libnetwork_internal_test.go +++ b/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"+ diff --git a/libnetwork/network.go b/libnetwork/network.go index ed2b52c790..a14550cd7e 100644 --- a/libnetwork/network.go +++ b/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