Skip to content

Commit 0d3bb6a

Browse files
committed
feat(logging): enhance L4LBConfig and LoggingConfig with improved validation rules for optionalFields
1 parent 5ec2475 commit 0d3bb6a

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

cmd/glbc/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ func main() {
192192
var l4LBConfigClient l4lbconfigclient.Interface
193193
if flags.F.ManageL4LBLogging && (flags.F.RunL4Controller || flags.F.RunL4NetLBController) {
194194
l4LBConfigCRDMeta := l4lbconfig.CRDMeta()
195+
klog.V(0).Info("Ensuring L4LBConfig CRD exists")
195196
if _, err := crdHandler.EnsureCRD(l4LBConfigCRDMeta, true); err != nil {
196197
klog.Fatalf("Failed to ensure L4LBConfig CRD: %v", err)
197198
}

pkg/apis/l4lbconfig/v1/types.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ type L4LBConfig struct {
3737
// +k8s:openapi-gen=true
3838
type L4LBConfigSpec struct {
3939
// Logging defines the telemetry and flow logging configuration for the L4 Load Balancer.
40+
// +k8s:validation:cel[0]:rule="(self.optionalMode == 'CUSTOM' && has(self.optionalFields) && size(self.optionalFields) > 0) || (self.optionalMode != 'CUSTOM' && (!has(self.optionalFields) || size(self.optionalFields) == 0))"
41+
// +k8s:validation:cel[0]:message="optionalFields can only be set when optionalMode is 'CUSTOM', and must be set when optionalMode is 'CUSTOM'"
4042
// +optional
4143
Logging *LoggingConfig `json:"logging,omitempty"`
4244
}
@@ -57,7 +59,6 @@ type L4LBConfigList struct {
5759
}
5860

5961
// LoggingConfig defines the parameters for LB logging.
60-
// +kubebuilder:validation:XValidation:rule="has(self.optionalFields) && size(self.optionalFields) > 0 ? self.optionalMode == 'CUSTOM' : true",message="optionalFields can only be set when optionalMode is 'CUSTOM'"
6162
// +k8s:openapi-gen=true
6263
type LoggingConfig struct {
6364
// Enabled allows toggling of Cloud Logging.
@@ -66,14 +67,14 @@ type LoggingConfig struct {
6667

6768
// SampleRate is the percentage of flows to log, from 0 to 1000000.
6869
// 1000000 means 100% of packets are logged.
69-
// +kubebuilder:validation:Minimum=0
70-
// +kubebuilder:validation:Maximum=1000000
70+
// +k8s:validation:Minimum=0
71+
// +k8s:validation:Maximum=1000000
7172
// +optional
7273
SampleRate *int32 `json:"sampleRate,omitempty"`
7374

7475
// OptionalMode defines which metadata fields to include in the logs.
7576
// Options: INCLUDE_ALL_OPTIONAL, EXCLUDE_ALL_OPTIONAL, CUSTOM.
76-
// +kubebuilder:validation:Enum=INCLUDE_ALL_OPTIONAL;EXCLUDE_ALL_OPTIONAL;CUSTOM
77+
// +k8s:validation:Enum=INCLUDE_ALL_OPTIONAL;EXCLUDE_ALL_OPTIONAL;CUSTOM
7778
// +optional
7879
OptionalMode string `json:"optionalMode,omitempty"`
7980

pkg/apis/l4lbconfig/v1/zz_generated.openapi.go

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

pkg/l4lbconfig/l4lbconfig.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,17 @@ func DetermineL4LoggingConfig(
157157
resolvedConfig.OptionalMode = "EXCLUDE_ALL_OPTIONAL"
158158
}
159159

160+
// Double-check OptionalMode validity before proceeding with OptionalFields checks
161+
// Validation already occurs at the API level, but this serves as a safeguard against any unexpected values.
160162
switch resolvedConfig.OptionalMode {
161163
case "EXCLUDE_ALL_OPTIONAL", "INCLUDE_ALL_OPTIONAL", "CUSTOM":
162164
// Valid
163165
default:
164166
return nil, NewConditionLoggingInvalid(ErrL4LBConfigInvalidMode), ErrL4LBConfigInvalidMode
165167
}
166168

169+
// Double-check consistency between OptionalMode and OptionalFields
170+
// Validation already occurs at the API level, but this serves as a safeguard against any unexpected states.
167171
if resolvedConfig.OptionalMode != "CUSTOM" && len(resolvedConfig.OptionalFields) > 0 {
168172
return nil, NewConditionLoggingInvalid(ErrL4LBConfigInvalidMode), ErrL4LBConfigInvalidMode
169173
}

0 commit comments

Comments
 (0)