Skip to content

Commit c40f1f4

Browse files
committed
remove lb check from generic validator
1 parent f3bddb7 commit c40f1f4

File tree

7 files changed

+40
-172
lines changed

7 files changed

+40
-172
lines changed

internal/controller/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func StartManager(cfg config.Config) error {
124124
mustExtractGVK := kinds.NewMustExtractGKV(scheme)
125125

126126
genericValidator := ngxvalidation.GenericValidator{}
127-
policyManager := createPolicyManager(mustExtractGVK, cfg.Plus, genericValidator)
127+
policyManager := createPolicyManager(mustExtractGVK, genericValidator, cfg.Plus)
128128

129129
plusSecrets, err := createPlusSecretMetadata(cfg, mgr.GetAPIReader())
130130
if err != nil {
@@ -322,8 +322,8 @@ func StartManager(cfg config.Config) error {
322322

323323
func createPolicyManager(
324324
mustExtractGVK kinds.MustExtractGVK,
325-
plusEnabled bool,
326325
validator validation.GenericValidator,
326+
plusEnabled bool,
327327
) *policies.CompositeValidator {
328328
cfgs := []policies.ManagerConfig{
329329
{

internal/controller/nginx/config/http/config.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package http
22

33
import (
4+
ngfAPI "github.com/nginx/nginx-gateway-fabric/v2/apis/v1alpha1"
45
"github.com/nginx/nginx-gateway-fabric/v2/internal/controller/nginx/config/shared"
56
)
67

@@ -168,3 +169,14 @@ type ServerConfig struct {
168169
Plus bool
169170
DisableSNIHostValidation bool
170171
}
172+
173+
var OSSAllowedLBMethods = map[ngfAPI.LoadBalancingType]struct{}{
174+
ngfAPI.LoadBalancingTypeRoundRobin: {},
175+
ngfAPI.LoadBalancingTypeLeastConnection: {},
176+
ngfAPI.LoadBalancingTypeIPHash: {},
177+
ngfAPI.LoadBalancingTypeRandom: {},
178+
ngfAPI.LoadBalancingTypeHash: {},
179+
ngfAPI.LoadBalancingTypeHashConsistent: {},
180+
ngfAPI.LoadBalancingTypeRandomTwo: {},
181+
ngfAPI.LoadBalancingTypeRandomTwoLeastConnection: {},
182+
}

internal/controller/nginx/config/policies/upstreamsettings/validator.go

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package upstreamsettings
22

33
import (
4+
"fmt"
5+
"strings"
6+
47
"k8s.io/apimachinery/pkg/util/validation/field"
58
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
69

710
ngfAPI "github.com/nginx/nginx-gateway-fabric/v2/apis/v1alpha1"
11+
httpConfig "github.com/nginx/nginx-gateway-fabric/v2/internal/controller/nginx/config/http"
812
"github.com/nginx/nginx-gateway-fabric/v2/internal/controller/nginx/config/policies"
913
"github.com/nginx/nginx-gateway-fabric/v2/internal/controller/state/conditions"
1014
"github.com/nginx/nginx-gateway-fabric/v2/internal/controller/state/validation"
@@ -123,7 +127,7 @@ func (v Validator) validateSettings(spec ngfAPI.UpstreamSettingsPolicySpec) erro
123127
allErrs = append(allErrs, v.validateUpstreamKeepAlive(*spec.KeepAlive, fieldPath.Child("keepAlive"))...)
124128
}
125129

126-
allErrs = append(allErrs, v.validateLoadBalancingMethod(spec, v.plusEnabled)...)
130+
allErrs = append(allErrs, v.validateLoadBalancingMethod(spec)...)
127131

128132
return allErrs.ToAggregate()
129133
}
@@ -154,21 +158,26 @@ func (v Validator) validateUpstreamKeepAlive(
154158
}
155159

156160
// ValidateLoadBalancingMethod validates the load balancing method for upstream servers.
157-
func (v Validator) validateLoadBalancingMethod(
158-
spec ngfAPI.UpstreamSettingsPolicySpec,
159-
plusEnabled bool,
160-
) field.ErrorList {
161+
func (v Validator) validateLoadBalancingMethod(spec ngfAPI.UpstreamSettingsPolicySpec) field.ErrorList {
161162
var allErrs field.ErrorList
162163
fieldPath := field.NewPath("spec")
163164

164165
if spec.LoadBalancingMethod == nil {
165166
return nil
166167
}
167168

168-
lbMethod := *spec.LoadBalancingMethod
169-
if err := v.genericValidator.ValidateLoadBalancingMethod(string(lbMethod), plusEnabled); err != nil {
170-
path := fieldPath.Child("loadBalancingMethod")
171-
allErrs = append(allErrs, field.Invalid(path, lbMethod, err.Error()))
169+
if !v.plusEnabled {
170+
if _, ok := httpConfig.OSSAllowedLBMethods[*spec.LoadBalancingMethod]; !ok {
171+
path := fieldPath.Child("loadBalancingMethod")
172+
allErrs = append(allErrs, field.Invalid(
173+
path,
174+
*spec.LoadBalancingMethod,
175+
fmt.Sprintf(
176+
"NGINX OSS only supports the following load balancing methods: %s",
177+
getLoadBalancingMethodList(httpConfig.OSSAllowedLBMethods),
178+
),
179+
))
180+
}
172181
}
173182

174183
if spec.HashMethodKey != nil {
@@ -181,3 +190,11 @@ func (v Validator) validateLoadBalancingMethod(
181190

182191
return allErrs
183192
}
193+
194+
func getLoadBalancingMethodList(lbMethods map[ngfAPI.LoadBalancingType]struct{}) string {
195+
methods := make([]string, 0, len(lbMethods))
196+
for method := range lbMethods {
197+
methods = append(methods, string(method))
198+
}
199+
return strings.Join(methods, ", ")
200+
}

internal/controller/nginx/config/validation/generic.go

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ package validation
22

33
import (
44
"errors"
5-
"fmt"
65
"regexp"
7-
"strings"
86

97
k8svalidation "k8s.io/apimachinery/pkg/util/validation"
10-
11-
ngfAPI "github.com/nginx/nginx-gateway-fabric/v2/apis/v1alpha1"
128
)
139

1410
// GenericValidator validates values for generic cases in the nginx conf.
@@ -131,54 +127,3 @@ func (GenericValidator) ValidateNginxVariableName(name string) error {
131127

132128
return nil
133129
}
134-
135-
var (
136-
PlusAllowedLBMethods = map[ngfAPI.LoadBalancingType]struct{}{
137-
ngfAPI.LoadBalancingTypeRoundRobin: {},
138-
ngfAPI.LoadBalancingTypeLeastConnection: {},
139-
ngfAPI.LoadBalancingTypeIPHash: {},
140-
ngfAPI.LoadBalancingTypeRandom: {},
141-
ngfAPI.LoadBalancingTypeHash: {},
142-
ngfAPI.LoadBalancingTypeHashConsistent: {},
143-
ngfAPI.LoadBalancingTypeRandomTwo: {},
144-
ngfAPI.LoadBalancingTypeRandomTwoLeastConnection: {},
145-
ngfAPI.LoadBalancingTypeLeastTimeHeader: {},
146-
ngfAPI.LoadBalancingTypeLeastTimeLastByte: {},
147-
ngfAPI.LoadBalancingTypeLeastTimeHeaderInflight: {},
148-
ngfAPI.LoadBalancingTypeLeastTimeLastByteInflight: {},
149-
ngfAPI.LoadBalancingTypeRandomTwoLeastTimeHeader: {},
150-
ngfAPI.LoadBalancingTypeRandomTwoLeastTimeLastByte: {},
151-
}
152-
153-
OSSAllowedLBMethods = map[ngfAPI.LoadBalancingType]struct{}{
154-
ngfAPI.LoadBalancingTypeRoundRobin: {},
155-
ngfAPI.LoadBalancingTypeLeastConnection: {},
156-
ngfAPI.LoadBalancingTypeIPHash: {},
157-
ngfAPI.LoadBalancingTypeRandom: {},
158-
ngfAPI.LoadBalancingTypeHash: {},
159-
ngfAPI.LoadBalancingTypeHashConsistent: {},
160-
ngfAPI.LoadBalancingTypeRandomTwo: {},
161-
ngfAPI.LoadBalancingTypeRandomTwoLeastConnection: {},
162-
}
163-
)
164-
165-
func (GenericValidator) ValidateLoadBalancingMethod(method string, plusEnabled bool) error {
166-
lbMethod := ngfAPI.LoadBalancingType(method)
167-
168-
if !plusEnabled {
169-
if _, ok := OSSAllowedLBMethods[lbMethod]; ok {
170-
return nil
171-
}
172-
}
173-
174-
return fmt.Errorf("NGINX OSS only supports the following load balancing methods: %s",
175-
getLoadBalancingMethodList(OSSAllowedLBMethods))
176-
}
177-
178-
func getLoadBalancingMethodList(lbMethods map[ngfAPI.LoadBalancingType]struct{}) string {
179-
var methods []string
180-
for method := range lbMethods {
181-
methods = append(methods, string(method))
182-
}
183-
return strings.Join(methods, ", ")
184-
}

internal/controller/nginx/config/validation/generic_test.go

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -134,34 +134,3 @@ func TestValidateNginxVariableName(t *testing.T) {
134134
`var$name`,
135135
)
136136
}
137-
138-
func makeValidator(plusEnabled bool) simpleValidatorFunc[string] {
139-
return func(v string) error {
140-
return (GenericValidator{}).ValidateLoadBalancingMethod(v, plusEnabled)
141-
}
142-
}
143-
144-
func TestValidateLoadBalancingMethod_OSS(t *testing.T) {
145-
t.Helper()
146-
147-
ossValidator := makeValidator(false)
148-
testValidValuesForSimpleValidator(t, ossValidator,
149-
"round_robin",
150-
"least_conn",
151-
"ip_hash",
152-
"hash",
153-
"hash consistent",
154-
"random",
155-
"random two",
156-
"random two least_conn",
157-
)
158-
159-
testInvalidValuesForSimpleValidator(t, ossValidator,
160-
"random two least_time=header",
161-
"random two least_time=last_byte",
162-
"least_time header",
163-
"least_time last_byte",
164-
"least_time header inflight",
165-
"least_time last_byte inflight",
166-
)
167-
}

internal/controller/state/validation/validationfakes/fake_generic_validator.go

Lines changed: 0 additions & 74 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/controller/state/validation/validator.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ type GenericValidator interface {
5050
ValidateNginxSize(size string) error
5151
ValidateEndpoint(endpoint string) error
5252
ValidateNginxVariableName(name string) error
53-
ValidateLoadBalancingMethod(method string, plusEnabled bool) error
5453
}
5554

5655
// PolicyValidator validates an NGF Policy.

0 commit comments

Comments
 (0)