Skip to content

Commit ba6718b

Browse files
committed
Merge branch 'main' into consistent-logic
2 parents 3975bca + e31c3f3 commit ba6718b

12 files changed

+127
-101
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/google/go-cmp v0.7.0
1515
github.com/google/uuid v1.6.0
1616
github.com/linode/linodego v1.48.1
17-
github.com/onsi/ginkgo/v2 v2.23.0
17+
github.com/onsi/ginkgo/v2 v2.23.3
1818
github.com/onsi/gomega v1.36.2
1919
github.com/stretchr/testify v1.10.0
2020
go.opentelemetry.io/contrib/exporters/autoexport v0.60.0
@@ -31,7 +31,7 @@ require (
3131
k8s.io/client-go v0.32.3
3232
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
3333
sigs.k8s.io/cluster-api v1.9.6
34-
sigs.k8s.io/controller-runtime v0.20.3
34+
sigs.k8s.io/controller-runtime v0.20.4
3535
)
3636

3737
require (

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
200200
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
201201
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
202202
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
203-
github.com/onsi/ginkgo/v2 v2.23.0 h1:FA1xjp8ieYDzlgS5ABTpdUDB7wtngggONc8a7ku2NqQ=
204-
github.com/onsi/ginkgo/v2 v2.23.0/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM=
203+
github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0=
204+
github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM=
205205
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
206206
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
207207
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
@@ -433,8 +433,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 h1:CPT0ExVicCzcp
433433
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
434434
sigs.k8s.io/cluster-api v1.9.6 h1:2jZ434qC0bzrPQzmRDm4/b0PZWVMnOocoCjsAonQN5Q=
435435
sigs.k8s.io/cluster-api v1.9.6/go.mod h1:DyqyZ4jRvKGKewDRn1Q4OCHaVjsdTogymbO6mrgHEDI=
436-
sigs.k8s.io/controller-runtime v0.20.3 h1:I6Ln8JfQjHH7JbtCD2HCYHoIzajoRxPNuvhvcDbZgkI=
437-
sigs.k8s.io/controller-runtime v0.20.3/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
436+
sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU=
437+
sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
438438
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
439439
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
440440
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=

internal/webhook/v1alpha2/linodecluster_webhook.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,18 @@ func (r *linodeClusterValidator) ValidateCreate(ctx context.Context, obj runtime
6161
linodeclusterlog.Info("validate create", "name", cluster.Name)
6262

6363
var linodeclient LinodeClient = defaultLinodeClient
64+
skipAPIValidation := false
6465

66+
// Handle credentials if provided
6567
if spec.CredentialsRef != nil {
66-
apiToken, err := getCredentialDataFromRef(ctx, r.Client, *spec.CredentialsRef, cluster.GetNamespace())
67-
if err != nil {
68-
linodeclusterlog.Error(err, "failed getting credentials from secret ref", "name", cluster.Name)
69-
return nil, err
70-
}
71-
linodeclusterlog.Info("creating a verified linode client for create request", "name", cluster.Name)
72-
linodeclient.SetToken(string(apiToken))
68+
skipAPIValidation, linodeclient = setupClientWithCredentials(ctx, r.Client, spec.CredentialsRef,
69+
cluster.Name, cluster.GetNamespace(), linodeclusterlog)
7370
}
71+
7472
// TODO: instrument with tracing, might need refactor to preserve readibility
7573
var errs field.ErrorList
7674

77-
if err := r.validateLinodeClusterSpec(ctx, linodeclient, spec); err != nil {
75+
if err := r.validateLinodeClusterSpec(ctx, linodeclient, spec, skipAPIValidation); err != nil {
7876
errs = slices.Concat(errs, err)
7977
}
8078

@@ -110,11 +108,13 @@ func (r *linodeClusterValidator) ValidateDelete(ctx context.Context, obj runtime
110108
return nil, nil
111109
}
112110

113-
func (r *linodeClusterValidator) validateLinodeClusterSpec(ctx context.Context, linodeclient LinodeClient, spec infrav1alpha2.LinodeClusterSpec) field.ErrorList {
111+
func (r *linodeClusterValidator) validateLinodeClusterSpec(ctx context.Context, linodeclient LinodeClient, spec infrav1alpha2.LinodeClusterSpec, skipAPIValidation bool) field.ErrorList {
114112
var errs field.ErrorList
115113

116-
if err := validateRegion(ctx, linodeclient, spec.Region, field.NewPath("spec").Child("region")); err != nil {
117-
errs = append(errs, err)
114+
if !skipAPIValidation {
115+
if err := validateRegion(ctx, linodeclient, spec.Region, field.NewPath("spec").Child("region")); err != nil {
116+
errs = append(errs, err)
117+
}
118118
}
119119

120120
if spec.Network.LoadBalancerType == "dns" {

internal/webhook/v1alpha2/linodecluster_webhook_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestValidateLinodeCluster(t *testing.T) {
7070
mck.LinodeClient.EXPECT().GetRegion(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes()
7171
}),
7272
Result("success", func(ctx context.Context, mck Mock) {
73-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, cluster.Spec)
73+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, cluster.Spec, SkipAPIValidation)
7474
require.Empty(t, errs)
7575
}),
7676
),
@@ -81,7 +81,7 @@ func TestValidateLinodeCluster(t *testing.T) {
8181
})),
8282
),
8383
Result("error", func(ctx context.Context, mck Mock) {
84-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, cluster.Spec)
84+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, cluster.Spec, SkipAPIValidation)
8585
for _, err := range errs {
8686
assert.ErrorContains(t, err, expectedErrorSubString)
8787
}
@@ -209,7 +209,7 @@ func TestValidateDNSLinodeCluster(t *testing.T) {
209209
mck.LinodeClient.EXPECT().GetRegion(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes()
210210
}),
211211
Result("success", func(ctx context.Context, mck Mock) {
212-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validCluster.Spec)
212+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validCluster.Spec, SkipAPIValidation)
213213
require.Empty(t, errs)
214214
}),
215215
),
@@ -220,7 +220,7 @@ func TestValidateDNSLinodeCluster(t *testing.T) {
220220
})),
221221
),
222222
Result("error", func(ctx context.Context, mck Mock) {
223-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, inValidCluster.Spec)
223+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, inValidCluster.Spec, SkipAPIValidation)
224224
for _, err := range errs {
225225
require.Contains(t, err.Error(), "dnsRootDomain")
226226
}
@@ -271,7 +271,7 @@ func TestValidateVlanAndVPC(t *testing.T) {
271271
mck.LinodeClient.EXPECT().GetRegion(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes()
272272
}),
273273
Result("success", func(ctx context.Context, mck Mock) {
274-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validCluster.Spec)
274+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validCluster.Spec, SkipAPIValidation)
275275
require.Empty(t, errs)
276276
}),
277277
),
@@ -282,7 +282,7 @@ func TestValidateVlanAndVPC(t *testing.T) {
282282
})),
283283
),
284284
Result("error", func(ctx context.Context, mck Mock) {
285-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, inValidCluster.Spec)
285+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, inValidCluster.Spec, SkipAPIValidation)
286286
for _, err := range errs {
287287
require.Contains(t, err.Error(), "Cannot use VLANs and VPCs together")
288288
}
@@ -352,7 +352,7 @@ func TestValidateVPCIDAndVPCRef(t *testing.T) {
352352
}, nil).AnyTimes()
353353
}),
354354
Result("success", func(ctx context.Context, mck Mock) {
355-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validClusterWithVPCID.Spec)
355+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validClusterWithVPCID.Spec, SkipAPIValidation)
356356
require.Empty(t, errs)
357357
}),
358358
),
@@ -363,7 +363,7 @@ func TestValidateVPCIDAndVPCRef(t *testing.T) {
363363
mck.LinodeClient.EXPECT().GetRegion(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes()
364364
}),
365365
Result("success", func(ctx context.Context, mck Mock) {
366-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validClusterWithVPCRef.Spec)
366+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, validClusterWithVPCRef.Spec, SkipAPIValidation)
367367
require.Empty(t, errs)
368368
}),
369369
),
@@ -374,7 +374,7 @@ func TestValidateVPCIDAndVPCRef(t *testing.T) {
374374
mck.LinodeClient.EXPECT().GetRegion(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes()
375375
}),
376376
Result("error", func(ctx context.Context, mck Mock) {
377-
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, invalidCluster.Spec)
377+
errs := validator.validateLinodeClusterSpec(ctx, mck.LinodeClient, invalidCluster.Spec, SkipAPIValidation)
378378
require.NotEmpty(t, errs)
379379
require.Contains(t, errs[0].Error(), "Cannot specify both VPCID and VPCRef")
380380
}),

internal/webhook/v1alpha2/linodemachine_webhook.go

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -73,27 +73,24 @@ func SetupLinodeMachineWebhookWithManager(mgr ctrl.Manager) error {
7373

7474
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
7575
func (r *linodeMachineValidator) ValidateCreate(ctx context.Context, obj runtime.Object) (admission.Warnings, error) {
76+
var linodeclient LinodeClient = defaultLinodeClient
77+
var errs field.ErrorList
78+
skipAPIValidation := false
79+
7680
machine, ok := obj.(*infrav1alpha2.LinodeMachine)
7781
if !ok {
7882
return nil, apierrors.NewBadRequest("expected a LinodeMachine Resource")
7983
}
8084
spec := machine.Spec
8185
linodemachinelog.Info("validate create", "name", machine.Name)
8286

83-
var linodeclient LinodeClient = defaultLinodeClient
84-
87+
// Handle credentials if provided
8588
if spec.CredentialsRef != nil {
86-
apiToken, err := getCredentialDataFromRef(ctx, r.Client, *spec.CredentialsRef, machine.GetNamespace())
87-
if err != nil {
88-
linodemachinelog.Error(err, "failed getting credentials from secret ref", "name", machine.Name)
89-
return nil, err
90-
}
91-
linodemachinelog.Info("creating a verified linode client for create request", "name", machine.Name)
92-
linodeclient.SetToken(string(apiToken))
89+
skipAPIValidation, linodeclient = setupClientWithCredentials(ctx, r.Client, spec.CredentialsRef,
90+
machine.Name, machine.GetNamespace(), linodemachinelog)
9391
}
94-
var errs field.ErrorList
9592

96-
if err := r.validateLinodeMachineSpec(ctx, linodeclient, spec); err != nil {
93+
if err := r.validateLinodeMachineSpec(ctx, linodeclient, spec, skipAPIValidation); err != nil {
9794
errs = slices.Concat(errs, err)
9895
}
9996

@@ -129,18 +126,20 @@ func (r *linodeMachineValidator) ValidateDelete(ctx context.Context, obj runtime
129126
return nil, nil
130127
}
131128

132-
func (r *linodeMachineValidator) validateLinodeMachineSpec(ctx context.Context, linodeclient LinodeClient, spec infrav1alpha2.LinodeMachineSpec) field.ErrorList {
129+
func (r *linodeMachineValidator) validateLinodeMachineSpec(ctx context.Context, linodeclient LinodeClient, spec infrav1alpha2.LinodeMachineSpec, skipAPIValidation bool) field.ErrorList {
133130
var errs field.ErrorList
134131

135-
if err := validateRegion(ctx, linodeclient, spec.Region, field.NewPath("spec").Child("region")); err != nil {
136-
errs = append(errs, err)
137-
}
138-
plan, err := validateLinodeType(ctx, linodeclient, spec.Type, field.NewPath("spec").Child("type"))
139-
if err != nil {
140-
errs = append(errs, err)
141-
}
142-
if err := r.validateLinodeMachineDisks(plan, spec); err != nil {
143-
errs = append(errs, err)
132+
if !skipAPIValidation {
133+
if err := validateRegion(ctx, linodeclient, spec.Region, field.NewPath("spec").Child("region")); err != nil {
134+
errs = append(errs, err)
135+
}
136+
plan, err := validateLinodeType(ctx, linodeclient, spec.Type, field.NewPath("spec").Child("type"))
137+
if err != nil {
138+
errs = append(errs, err)
139+
}
140+
if err := r.validateLinodeMachineDisks(plan, spec); err != nil {
141+
errs = append(errs, err)
142+
}
144143
}
145144

146145
if spec.VPCID != nil && spec.VPCRef != nil {

internal/webhook/v1alpha2/linodemachine_webhook_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func TestValidateLinodeMachine(t *testing.T) {
7373
mck.LinodeClient.EXPECT().GetType(gomock.Any(), gomock.Any()).Return(&plan_max, nil).AnyTimes()
7474
}),
7575
Result("success", func(ctx context.Context, mck Mock) {
76-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
76+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
7777
require.Empty(t, errs)
7878
}),
7979
Call("valid with disks", func(ctx context.Context, mck Mock) {
@@ -84,7 +84,7 @@ func TestValidateLinodeMachine(t *testing.T) {
8484
machine := machine
8585
machine.Spec.OSDisk = disk.DeepCopy()
8686
machine.Spec.DataDisks = map[string]*infrav1alpha2.InstanceDisk{"sdb": disk.DeepCopy()}
87-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
87+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
8888
require.Empty(t, errs)
8989
}),
9090
),
@@ -100,7 +100,7 @@ func TestValidateLinodeMachine(t *testing.T) {
100100
})),
101101
),
102102
Result("error", func(ctx context.Context, mck Mock) {
103-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
103+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
104104
for _, err := range errs {
105105
require.Error(t, err)
106106
}
@@ -114,7 +114,7 @@ func TestValidateLinodeMachine(t *testing.T) {
114114
Result("os disk too large", func(ctx context.Context, mck Mock) {
115115
machine := machine
116116
machine.Spec.OSDisk = disk.DeepCopy()
117-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
117+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
118118
for _, err := range errs {
119119
assert.ErrorContains(t, err, strconv.Itoa(plan_zero.Disk))
120120
}
@@ -129,7 +129,7 @@ func TestValidateLinodeMachine(t *testing.T) {
129129
machine := machine
130130
machine.Spec.OSDisk = disk.DeepCopy()
131131
machine.Spec.DataDisks = map[string]*infrav1alpha2.InstanceDisk{"sdb": disk.DeepCopy(), "sdc": disk.DeepCopy()}
132-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
132+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
133133
for _, err := range errs {
134134
assert.ErrorContains(t, err, expectedErrorSubStringOSDisk)
135135
}
@@ -143,7 +143,7 @@ func TestValidateLinodeMachine(t *testing.T) {
143143
Result("error", func(ctx context.Context, mck Mock) {
144144
machine := machine
145145
machine.Spec.DataDisks = map[string]*infrav1alpha2.InstanceDisk{"sda": disk.DeepCopy()}
146-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
146+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
147147
for _, err := range errs {
148148
assert.ErrorContains(t, err, expectedErrorSubStringOSDiskDataDiskInvalid)
149149
}
@@ -157,7 +157,7 @@ func TestValidateLinodeMachine(t *testing.T) {
157157
Result("error", func(ctx context.Context, mck Mock) {
158158
machine := machine
159159
machine.Spec.OSDisk = disk_zero.DeepCopy()
160-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec)
160+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, machine.Spec, SkipAPIValidation)
161161
for _, err := range errs {
162162
assert.ErrorContains(t, err, expectedErrorSubStringOSDiskOSDiskInvalid)
163163
}
@@ -312,7 +312,7 @@ func TestValidateVPCIDAndVPCRefOnMachine(t *testing.T) {
312312
}, nil).AnyTimes()
313313
}),
314314
Result("success", func(ctx context.Context, mck Mock) {
315-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, validMachineWithVPCID.Spec)
315+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, validMachineWithVPCID.Spec, SkipAPIValidation)
316316
require.Empty(t, errs)
317317
}),
318318
),
@@ -328,7 +328,7 @@ func TestValidateVPCIDAndVPCRefOnMachine(t *testing.T) {
328328
}, nil).AnyTimes()
329329
}),
330330
Result("success", func(ctx context.Context, mck Mock) {
331-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, validMachineWithVPCRef.Spec)
331+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, validMachineWithVPCRef.Spec, SkipAPIValidation)
332332
require.Empty(t, errs)
333333
}),
334334
),
@@ -344,7 +344,7 @@ func TestValidateVPCIDAndVPCRefOnMachine(t *testing.T) {
344344
}, nil).AnyTimes()
345345
}),
346346
Result("error", func(ctx context.Context, mck Mock) {
347-
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, invalidMachine.Spec)
347+
errs := validator.validateLinodeMachineSpec(ctx, mck.LinodeClient, invalidMachine.Spec, SkipAPIValidation)
348348
require.NotEmpty(t, errs)
349349
require.Contains(t, errs[0].Error(), "Cannot specify both VPCID and VPCRef")
350350
}),

internal/webhook/v1alpha2/linodeplacementgroup_webhook.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,17 @@ func (v *LinodePlacementGroupCustomValidator) ValidateCreate(ctx context.Context
7676
linodeplacementgrouplog.Info("Validation for LinodePlacementGroup upon creation", "name", pg.GetName())
7777

7878
var linodeclient LinodeClient = defaultLinodeClient
79+
skipAPIValidation := false
7980

81+
// Handle credentials if provided
8082
if pg.Spec.CredentialsRef != nil {
81-
apiToken, err := getCredentialDataFromRef(ctx, v.Client, *pg.Spec.CredentialsRef, pg.GetNamespace())
82-
if err != nil {
83-
linodeplacementgrouplog.Error(err, "failed getting credentials from secret ref", "name", pg.Name)
84-
return nil, err
85-
}
86-
linodeplacementgrouplog.Info("creating a verified linode client for create request", "name", pg.Name)
87-
linodeclient.SetToken(string(apiToken))
83+
skipAPIValidation, linodeclient = setupClientWithCredentials(ctx, v.Client, pg.Spec.CredentialsRef,
84+
pg.Name, pg.GetNamespace(), linodeplacementgrouplog)
8885
}
8986

9087
var errs field.ErrorList
9188

92-
if err := v.validateLinodePlacementGroupSpec(ctx, linodeclient, pg.Spec, pg.Name); err != nil {
89+
if err := v.validateLinodePlacementGroupSpec(ctx, linodeclient, pg.Spec, pg.Name, skipAPIValidation); err != nil {
9390
errs = slices.Concat(errs, err)
9491
}
9592

@@ -127,11 +124,13 @@ func (v *LinodePlacementGroupCustomValidator) ValidateDelete(ctx context.Context
127124
return nil, nil
128125
}
129126

130-
func (v *LinodePlacementGroupCustomValidator) validateLinodePlacementGroupSpec(ctx context.Context, linodeclient LinodeClient, spec infrav1alpha2.LinodePlacementGroupSpec, label string) field.ErrorList {
127+
func (v *LinodePlacementGroupCustomValidator) validateLinodePlacementGroupSpec(ctx context.Context, linodeclient LinodeClient, spec infrav1alpha2.LinodePlacementGroupSpec, label string, skipAPIValidation bool) field.ErrorList {
131128
var errs field.ErrorList
132129

133-
if err := validateRegion(ctx, linodeclient, spec.Region, field.NewPath("spec").Child("region"), LinodePlacementGroupCapability); err != nil {
134-
errs = append(errs, err)
130+
if !skipAPIValidation {
131+
if err := validateRegion(ctx, linodeclient, spec.Region, field.NewPath("spec").Child("region"), LinodePlacementGroupCapability); err != nil {
132+
errs = append(errs, err)
133+
}
135134
}
136135

137136
if err := validatePlacementGroupLabel(label, field.NewPath("metadata").Child("name")); err != nil {

0 commit comments

Comments
 (0)