Skip to content

Commit e36455e

Browse files
authored
fix: FeatureFlag update validation bad state (#790)
Signed-off-by: Yosiah de Koeyer <dev@yosiahdekoeyer.dev>
1 parent 5e91071 commit e36455e

9 files changed

Lines changed: 83 additions & 9 deletions

File tree

internal/webhook/featureflag_webhook.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ import (
3333
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
3434
)
3535

36-
type FeatureFlagCustomValidator struct {
37-
}
36+
type FeatureFlagCustomValidator struct{}
3837

3938
// log is for logging in this package.
40-
var featureFlagLog = logf.Log.WithName("featureflag-resource validator")
41-
var compiledSchema *gojsonschema.Schema
42-
var schemaInitOnce sync.Once
39+
var (
40+
featureFlagLog = logf.Log.WithName("featureflag-resource validator")
41+
compiledSchema *gojsonschema.Schema
42+
schemaInitOnce sync.Once
43+
)
4344

4445
func (v *FeatureFlagCustomValidator) SetupWebhookWithManager(mgr ctrl.Manager) error {
4546
return ctrl.NewWebhookManagedBy(mgr).
@@ -71,10 +72,10 @@ func (v *FeatureFlagCustomValidator) ValidateCreate(ctx context.Context, obj run
7172

7273
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
7374
func (v *FeatureFlagCustomValidator) ValidateUpdate(ctx context.Context, oldObj runtime.Object, newObj runtime.Object) (warnings admission.Warnings, err error) {
74-
featureFlag, ok := oldObj.(*v1beta1.FeatureFlag)
75+
featureFlag, ok := newObj.(*v1beta1.FeatureFlag)
7576

7677
if !ok {
77-
return nil, fmt.Errorf("expected a FeatureFlag object but got %T", oldObj)
78+
return nil, fmt.Errorf("expected a FeatureFlag object but got %T", newObj)
7879
}
7980

8081
featureFlagLog.Info("validate update", "name", featureFlag.Name)
@@ -135,7 +136,6 @@ func initSchemas() (*gojsonschema.Schema, error) {
135136
if err == nil {
136137
compiledSchema, err = schemaLoader.Compile(gojsonschema.NewStringLoader(schema.FlagSchema))
137138
}
138-
139139
})
140140

141141
return compiledSchema, err

test/e2e/chainsaw/validate-featureflag/chainsaw-test.yaml renamed to test/e2e/chainsaw/validate-featureflag-create/chainsaw-test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
apiVersion: chainsaw.kyverno.io/v1alpha1
33
kind: Test
44
metadata:
5-
name: validate-featureflag
5+
name: validate-featureflag-create
66
spec:
77
steps:
88
- name: step-00

test/e2e/chainsaw/validate-featureflag/featureflag_bad.yaml renamed to test/e2e/chainsaw/validate-featureflag-create/featureflag_bad.yaml

File renamed without changes.

test/e2e/chainsaw/validate-featureflag/featureflag_good.yaml renamed to test/e2e/chainsaw/validate-featureflag-create/featureflag_good.yaml

File renamed without changes.

test/e2e/chainsaw/validate-featureflag/featureflag_good_empty.yaml renamed to test/e2e/chainsaw/validate-featureflag-create/featureflag_good_empty.yaml

File renamed without changes.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json
2+
apiVersion: chainsaw.kyverno.io/v1alpha1
3+
kind: Test
4+
metadata:
5+
name: validate-featureflag-update
6+
spec:
7+
steps:
8+
- name: step-00
9+
try:
10+
- apply:
11+
file: featureflag_good_empty.yaml
12+
- update:
13+
file: featureflag_good.yaml
14+
- error:
15+
file: featureflag_bad.yaml
16+
- update:
17+
file: featureflag_good_empty.yaml
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: core.openfeature.dev/v1beta1
2+
kind: FeatureFlag
3+
metadata:
4+
name: featureflag-sample
5+
spec:
6+
flagSpec:
7+
flags:
8+
fibAlgo:
9+
variants:
10+
recursive: recursive
11+
memo: memo
12+
loop: loop
13+
binet: binet
14+
defaultVariant: recursive
15+
state: ENABLED
16+
targeting:
17+
fractional:
18+
- "invalid"
19+
- ["clubs", 25]
20+
- ["diamonds", 25]
21+
- ["hearts", 25]
22+
- ["spades", 25]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: core.openfeature.dev/v1beta1
2+
kind: FeatureFlag
3+
metadata:
4+
name: featureflag-sample
5+
spec:
6+
flagSpec:
7+
flags:
8+
fibAlgo:
9+
variants:
10+
recursive: recursive
11+
memo: memo
12+
loop: loop
13+
binet: binet
14+
defaultVariant: recursive
15+
state: ENABLED
16+
targeting:
17+
if:
18+
- "$ref": emailWithFaas
19+
- binet
20+
- null
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: core.openfeature.dev/v1beta1
2+
kind: FeatureFlag
3+
metadata:
4+
name: featureflag-sample
5+
spec:
6+
flagSpec:
7+
flags:
8+
fibAlgo:
9+
variants:
10+
recursive: recursive
11+
memo: memo
12+
loop: loop
13+
binet: binet
14+
defaultVariant: recursive
15+
state: ENABLED

0 commit comments

Comments
 (0)