Skip to content

Commit a2d215b

Browse files
tchinmai7eljohnson92
authored andcommitted
use vpc-v6 ips over slaac
1 parent 0f95a45 commit a2d215b

File tree

5 files changed

+543
-70
lines changed

5 files changed

+543
-70
lines changed

go.mod

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ require (
2727
go.uber.org/mock v0.6.0
2828
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
2929
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
30-
golang.org/x/mod v0.27.0
30+
golang.org/x/mod v0.30.0
3131
k8s.io/api v0.33.4
3232
k8s.io/apimachinery v0.33.4
3333
k8s.io/client-go v0.33.4
@@ -68,7 +68,7 @@ require (
6868
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
6969
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
7070
go.yaml.in/yaml/v3 v3.0.4 // indirect
71-
golang.org/x/sync v0.16.0 // indirect
71+
golang.org/x/sync v0.19.0 // indirect
7272
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
7373
k8s.io/apiserver v0.33.0 // indirect
7474
k8s.io/component-base v0.33.0 // indirect
@@ -92,7 +92,7 @@ require (
9292
github.com/go-openapi/jsonreference v0.20.2 // indirect
9393
github.com/go-openapi/swag v0.23.0 // indirect
9494
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
95-
github.com/go-resty/resty/v2 v2.16.5
95+
github.com/go-resty/resty/v2 v2.17.0
9696
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
9797
github.com/gobuffalo/flect v1.0.3 // indirect
9898
github.com/gogo/protobuf v1.3.2 // indirect
@@ -134,13 +134,13 @@ require (
134134
go.uber.org/multierr v1.11.0 // indirect
135135
go.uber.org/ratelimit v0.2.0 // indirect
136136
go.uber.org/zap v1.27.0 // indirect
137-
golang.org/x/net v0.43.0 // indirect
138-
golang.org/x/oauth2 v0.30.0 // indirect
139-
golang.org/x/sys v0.35.0 // indirect
140-
golang.org/x/term v0.34.0 // indirect
141-
golang.org/x/text v0.28.0 // indirect
142-
golang.org/x/time v0.9.0 // indirect
143-
golang.org/x/tools v0.36.0 // indirect
137+
golang.org/x/net v0.48.0 // indirect
138+
golang.org/x/oauth2 v0.34.0 // indirect
139+
golang.org/x/sys v0.39.0 // indirect
140+
golang.org/x/term v0.38.0 // indirect
141+
golang.org/x/text v0.32.0 // indirect
142+
golang.org/x/time v0.12.0 // indirect
143+
golang.org/x/tools v0.39.0 // indirect
144144
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
145145
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
146146
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
@@ -156,3 +156,5 @@ require (
156156
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
157157
sigs.k8s.io/yaml v1.4.0 // indirect
158158
)
159+
160+
replace github.com/linode/linodego => github.com/tchinmai7/linodego v1.34.1-0.20251210221053-48c1abab283a

go.sum

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr
115115
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
116116
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es=
117117
github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew=
118-
github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
119-
github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
118+
github.com/go-resty/resty/v2 v2.17.0 h1:pW9DeXcaL4Rrym4EZ8v7L19zZiIlWPg5YXAcVmt+gN0=
119+
github.com/go-resty/resty/v2 v2.17.0/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA=
120120
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
121121
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
122122
github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
@@ -179,8 +179,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
179179
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
180180
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
181181
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
182-
github.com/linode/linodego v1.56.0 h1:WO2ztR6/hdfqCIeZnC8DyYb+AXnuWOl4FB/qqK6T5HE=
183-
github.com/linode/linodego v1.56.0/go.mod h1:W5+QH6nCppgi5gud/b16uAKOzTtfuwzjOHEFA7bKOd0=
184182
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
185183
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
186184
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
@@ -258,6 +256,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
258256
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
259257
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
260258
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
259+
github.com/tchinmai7/linodego v1.34.1-0.20251210221053-48c1abab283a h1:ejEJ+sStrC7rrJpWBAV7DWTwYmoc/euzPJcLEK2wRJE=
260+
github.com/tchinmai7/linodego v1.34.1-0.20251210221053-48c1abab283a/go.mod h1:FoIEsuZMRlXiUt6RnuGcPTek5iAO3VfE6bjMpGlcQ2U=
261261
github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0=
262262
github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
263263
github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
@@ -339,51 +339,51 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
339339
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
340340
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
341341
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
342-
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
343-
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
342+
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
343+
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
344344
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
345345
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
346346
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
347347
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
348-
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
349-
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
348+
golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
349+
golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
350350
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
351351
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
352352
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
353353
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
354354
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
355-
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
356-
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
357-
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
358-
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
355+
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
356+
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
357+
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
358+
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
359359
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
360360
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
361361
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
362362
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
363-
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
364-
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
363+
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
364+
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
365365
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
366366
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
367367
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
368368
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
369369
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
370-
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
371-
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
372-
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
373-
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
370+
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
371+
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
372+
golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
373+
golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
374374
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
375375
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
376376
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
377-
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
378-
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
379-
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
380-
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
377+
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
378+
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
379+
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
380+
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
381381
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
382382
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
383383
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
384384
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
385-
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
386-
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
385+
golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
386+
golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
387387
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
388388
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
389389
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/controller/linodemachine_controller_helpers.go

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ func addVPCInterfaceFromReference(ctx context.Context, machineScope *scope.Machi
245245
return nil
246246
}
247247

248+
// nolint: gocyclo // complexity is acceptable for this function
248249
func buildInstanceAddrs(ctx context.Context, machineScope *scope.MachineScope, instanceID int) ([]clusterv1.MachineAddress, error) {
249250
addresses, err := machineScope.LinodeClient.GetInstanceIPAddresses(ctx, instanceID)
250251
if err != nil {
@@ -261,18 +262,6 @@ func buildInstanceAddrs(ctx context.Context, machineScope *scope.MachineScope, i
261262
Type: clusterv1.MachineExternalIP,
262263
})
263264

264-
// check if a node has public ipv6 ip and store it
265-
if addresses.IPv6 == nil {
266-
return nil, errNoPublicIPv6Addrs
267-
}
268-
if addresses.IPv6.SLAAC == nil {
269-
return nil, errNoPublicIPv6SLAACAddrs
270-
}
271-
ips = append(ips, clusterv1.MachineAddress{
272-
Address: addresses.IPv6.SLAAC.Address,
273-
Type: clusterv1.MachineExternalIP,
274-
})
275-
276265
// check if a node has vpc specific ip and store it
277266
for _, vpcIP := range addresses.IPv4.VPC {
278267
if vpcIP.Address != nil && *vpcIP.Address != "" {
@@ -283,6 +272,39 @@ func buildInstanceAddrs(ctx context.Context, machineScope *scope.MachineScope, i
283272
}
284273
}
285274

275+
if addresses.IPv6 == nil {
276+
return nil, errNoPublicIPv6Addrs
277+
}
278+
// if the cluster has a public vpc ipv6 exclude the slaac
279+
vpcPublicIPv6 := false
280+
281+
for _, vpcIP := range addresses.IPv6.VPC {
282+
var ipType clusterv1.MachineAddressType
283+
if vpcIP.IPv6IsPublic != nil && *vpcIP.IPv6IsPublic {
284+
vpcPublicIPv6 = true
285+
ipType = clusterv1.MachineExternalIP
286+
} else {
287+
ipType = clusterv1.MachineInternalIP
288+
}
289+
for _, ipv6IP := range vpcIP.IPv6Addresses {
290+
ips = append(ips, clusterv1.MachineAddress{
291+
Address: ipv6IP.SLAACAddress,
292+
Type: ipType,
293+
})
294+
}
295+
}
296+
297+
if !vpcPublicIPv6 {
298+
// check if a node has public ipv6 ip and store it
299+
if addresses.IPv6.SLAAC == nil {
300+
return nil, errNoPublicIPv6SLAACAddrs
301+
}
302+
ips = append(ips, clusterv1.MachineAddress{
303+
Address: addresses.IPv6.SLAAC.Address,
304+
Type: clusterv1.MachineExternalIP,
305+
})
306+
}
307+
286308
if machineScope.LinodeCluster.Spec.Network.UseVlan {
287309
vlanIps, err := handleVlanIps(ctx, machineScope, instanceID)
288310
if err != nil {
@@ -672,7 +694,7 @@ func getVPCLinodeInterfaceConfig(ctx context.Context, machineScope *scope.Machin
672694
VPC: &linodego.VPCInterfaceCreateOptions{
673695
SubnetID: subnetID,
674696
IPv4: &linodego.VPCInterfaceIPv4CreateOptions{
675-
Addresses: []linodego.VPCInterfaceIPv4AddressCreateOptions{{
697+
Addresses: &[]linodego.VPCInterfaceIPv4AddressCreateOptions{{
676698
Primary: ptr.To(true),
677699
NAT1To1Address: ptr.To("auto"),
678700
Address: ptr.To("auto"),
@@ -757,7 +779,7 @@ func getVPCLinodeInterfaceConfigFromDirectID(ctx context.Context, machineScope *
757779
VPC: &linodego.VPCInterfaceCreateOptions{
758780
SubnetID: subnetID,
759781
IPv4: &linodego.VPCInterfaceIPv4CreateOptions{
760-
Addresses: []linodego.VPCInterfaceIPv4AddressCreateOptions{{
782+
Addresses: &[]linodego.VPCInterfaceIPv4AddressCreateOptions{{
761783
Primary: ptr.To(true),
762784
NAT1To1Address: ptr.To("auto"),
763785
Address: ptr.To("auto"),
@@ -847,10 +869,7 @@ func isIPv6ConfigEmpty(opts *linodego.InstanceConfigInterfaceCreateOptionsIPv6)
847869
}
848870

849871
func isVPCInterfaceIPv6ConfigEmpty(opts *linodego.VPCInterfaceIPv6CreateOptions) bool {
850-
return opts == nil ||
851-
len(opts.SLAAC) == 0 &&
852-
len(opts.Ranges) == 0 &&
853-
!opts.IsPublic
872+
return opts == nil || (opts.SLAAC == nil && opts.Ranges == nil && opts.IsPublic == nil)
854873
}
855874

856875
// getMachineIPv6Config returns the IPv6 configuration for a LinodeMachine.
@@ -904,18 +923,18 @@ func getVPCLinodeInterfaceIPv6Config(machineScope *scope.MachineScope, numIPv6Ra
904923

905924
if machineScope.LinodeMachine.Spec.IPv6Options.IsPublicIPv6 != nil {
906925
// Set the public IPv6 flag based on the IsPublicIPv6 specification.
907-
intfOpts.IsPublic = *machineScope.LinodeMachine.Spec.IPv6Options.IsPublicIPv6
926+
intfOpts.IsPublic = machineScope.LinodeMachine.Spec.IPv6Options.IsPublicIPv6
908927
}
909928

910929
if machineScope.LinodeMachine.Spec.IPv6Options.EnableSLAAC != nil && *machineScope.LinodeMachine.Spec.IPv6Options.EnableSLAAC {
911-
intfOpts.SLAAC = []linodego.VPCInterfaceIPv6SLAACCreateOptions{
930+
intfOpts.SLAAC = &[]linodego.VPCInterfaceIPv6SLAACCreateOptions{
912931
{
913932
Range: defaultNodeIPv6CIDRRange,
914933
},
915934
}
916935
}
917936
if machineScope.LinodeMachine.Spec.IPv6Options.EnableRanges != nil && *machineScope.LinodeMachine.Spec.IPv6Options.EnableRanges {
918-
intfOpts.Ranges = []linodego.VPCInterfaceIPv6RangeCreateOptions{
937+
intfOpts.Ranges = &[]linodego.VPCInterfaceIPv6RangeCreateOptions{
919938
{
920939
Range: defaultNodeIPv6CIDRRange,
921940
},
@@ -1009,13 +1028,13 @@ func constructLinodeInterfaceVPC(iface infrav1alpha2.LinodeInterfaceCreateOption
10091028
return &linodego.VPCInterfaceCreateOptions{
10101029
SubnetID: iface.VPC.SubnetID,
10111030
IPv4: &linodego.VPCInterfaceIPv4CreateOptions{
1012-
Addresses: ipv4Addrs,
1013-
Ranges: ipv4Ranges,
1031+
Addresses: &ipv4Addrs,
1032+
Ranges: &ipv4Ranges,
10141033
},
10151034
IPv6: &linodego.VPCInterfaceIPv6CreateOptions{
1016-
SLAAC: ipv6SLAAC,
1017-
Ranges: ipv6Ranges,
1018-
IsPublic: ipv6IsPublic,
1035+
SLAAC: &ipv6SLAAC,
1036+
Ranges: &ipv6Ranges,
1037+
IsPublic: &ipv6IsPublic,
10191038
},
10201039
}
10211040
}
@@ -1043,10 +1062,10 @@ func constructLinodeInterfacePublic(iface infrav1alpha2.LinodeInterfaceCreateOpt
10431062
}
10441063
return &linodego.PublicInterfaceCreateOptions{
10451064
IPv4: &linodego.PublicInterfaceIPv4CreateOptions{
1046-
Addresses: ipv4Addrs,
1065+
Addresses: &ipv4Addrs,
10471066
},
10481067
IPv6: &linodego.PublicInterfaceIPv6CreateOptions{
1049-
Ranges: ipv6Ranges,
1068+
Ranges: &ipv6Ranges,
10501069
},
10511070
}
10521071
}

0 commit comments

Comments
 (0)