1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Persist ipam driver options

Signed-off-by: Alessandro Boch <aboch@docker.com>
This commit is contained in:
Alessandro Boch 2016-04-07 09:36:53 -07:00
parent a50e0482e6
commit 865951c6e8
2 changed files with 25 additions and 1 deletions

View file

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

View file

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