The IpamConf.CopyTo function expected the caller to construct an
IpamConf to copy to, but all callsites created an empty struct.
In addition, `CopyTo` would never return an error, so the error
return was redundant.
Replace it with a `Copy()` function, which makes it easier to
consume.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -5,6 +5,7 @@ import ( |
| 5 | 5 |
"encoding/json" |
| 6 | 6 |
"errors" |
| 7 | 7 |
"fmt" |
| 8 |
+ "maps" |
|
| 8 | 9 |
"net" |
| 9 | 10 |
"net/netip" |
| 10 | 11 |
"runtime" |
| ... | ... |
@@ -315,18 +316,18 @@ func (n *Network) New() datastore.KVObject {
|
| 315 | 315 |
} |
| 316 | 316 |
} |
| 317 | 317 |
|
| 318 |
-// CopyTo deep copies to the destination IpamConfig |
|
| 319 |
-func (c *IpamConf) CopyTo(dstC *IpamConf) error {
|
|
| 320 |
- dstC.PreferredPool = c.PreferredPool |
|
| 321 |
- dstC.SubPool = c.SubPool |
|
| 322 |
- dstC.Gateway = c.Gateway |
|
| 323 |
- if c.AuxAddresses != nil {
|
|
| 324 |
- dstC.AuxAddresses = make(map[string]string, len(c.AuxAddresses)) |
|
| 325 |
- for k, v := range c.AuxAddresses {
|
|
| 326 |
- dstC.AuxAddresses[k] = v |
|
| 327 |
- } |
|
| 318 |
+// Copy returns a deep copy of the [IpamConf]. If the receiver is nil, |
|
| 319 |
+// Copy returns nil. |
|
| 320 |
+func (c *IpamConf) Copy() *IpamConf {
|
|
| 321 |
+ if c == nil {
|
|
| 322 |
+ return nil |
|
| 323 |
+ } |
|
| 324 |
+ return &IpamConf{
|
|
| 325 |
+ PreferredPool: c.PreferredPool, |
|
| 326 |
+ SubPool: c.SubPool, |
|
| 327 |
+ Gateway: c.Gateway, |
|
| 328 |
+ AuxAddresses: maps.Clone(c.AuxAddresses), |
|
| 328 | 329 |
} |
| 329 |
- return nil |
|
| 330 | 330 |
} |
| 331 | 331 |
|
| 332 | 332 |
// CopyTo deep copies to the destination IpamInfo |
| ... | ... |
@@ -500,12 +501,8 @@ func (n *Network) CopyTo(o datastore.KVObject) error {
|
| 500 | 500 |
} |
| 501 | 501 |
} |
| 502 | 502 |
|
| 503 |
- for _, v4conf := range n.ipamV4Config {
|
|
| 504 |
- dstV4Conf := &IpamConf{}
|
|
| 505 |
- if err := v4conf.CopyTo(dstV4Conf); err != nil {
|
|
| 506 |
- return err |
|
| 507 |
- } |
|
| 508 |
- dstN.ipamV4Config = append(dstN.ipamV4Config, dstV4Conf) |
|
| 503 |
+ for _, c := range n.ipamV4Config {
|
|
| 504 |
+ dstN.ipamV4Config = append(dstN.ipamV4Config, c.Copy()) |
|
| 509 | 505 |
} |
| 510 | 506 |
|
| 511 | 507 |
for _, v4info := range n.ipamV4Info {
|
| ... | ... |
@@ -516,12 +513,8 @@ func (n *Network) CopyTo(o datastore.KVObject) error {
|
| 516 | 516 |
dstN.ipamV4Info = append(dstN.ipamV4Info, dstV4Info) |
| 517 | 517 |
} |
| 518 | 518 |
|
| 519 |
- for _, v6conf := range n.ipamV6Config {
|
|
| 520 |
- dstV6Conf := &IpamConf{}
|
|
| 521 |
- if err := v6conf.CopyTo(dstV6Conf); err != nil {
|
|
| 522 |
- return err |
|
| 523 |
- } |
|
| 524 |
- dstN.ipamV6Config = append(dstN.ipamV6Config, dstV6Conf) |
|
| 519 |
+ for _, c := range n.ipamV6Config {
|
|
| 520 |
+ dstN.ipamV6Config = append(dstN.ipamV6Config, c.Copy()) |
|
| 525 | 521 |
} |
| 526 | 522 |
|
| 527 | 523 |
for _, v6info := range n.ipamV6Info {
|
| ... | ... |
@@ -1776,20 +1769,12 @@ func (n *Network) IpamConfig() (ipamType string, ipamOptions map[string]string, |
| 1776 | 1776 |
|
| 1777 | 1777 |
ipamV4Config = make([]*IpamConf, len(n.ipamV4Config)) |
| 1778 | 1778 |
for i, c := range n.ipamV4Config {
|
| 1779 |
- cc := &IpamConf{}
|
|
| 1780 |
- if err := c.CopyTo(cc); err != nil {
|
|
| 1781 |
- log.G(context.TODO()).WithError(err).Error("Error copying ipam ipv4 config")
|
|
| 1782 |
- } |
|
| 1783 |
- ipamV4Config[i] = cc |
|
| 1779 |
+ ipamV4Config[i] = c.Copy() |
|
| 1784 | 1780 |
} |
| 1785 | 1781 |
|
| 1786 | 1782 |
ipamV6Config = make([]*IpamConf, len(n.ipamV6Config)) |
| 1787 | 1783 |
for i, c := range n.ipamV6Config {
|
| 1788 |
- cc := &IpamConf{}
|
|
| 1789 |
- if err := c.CopyTo(cc); err != nil {
|
|
| 1790 |
- log.G(context.TODO()).WithError(err).Debug("Error copying ipam ipv6 config")
|
|
| 1791 |
- } |
|
| 1792 |
- ipamV6Config[i] = cc |
|
| 1784 |
+ ipamV6Config[i] = c.Copy() |
|
| 1793 | 1785 |
} |
| 1794 | 1786 |
|
| 1795 | 1787 |
return n.ipamType, n.ipamOptions, ipamV4Config, ipamV6Config |