Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
df657cf
feat: Add CEL-based conditional function execution
SurbhiAgarwal1 Mar 17, 2026
f868f34
fix: remove k8s.io/apiserver dependency from CEL evaluator
SurbhiAgarwal1 Mar 19, 2026
afd7eaa
refactor: move CELEnvironment to runneroptions, compile program per E…
SurbhiAgarwal1 Mar 19, 2026
95701b2
Potential fix for pull request finding
SurbhiAgarwal1 Mar 19, 2026
b421aa8
refactor: replace Go unit e2e test with proper fn-render testdata
SurbhiAgarwal1 Mar 19, 2026
7636e8c
fix: remove k8s.io/apiserver from go.mod, fix celeval_test.go imports
SurbhiAgarwal1 Mar 19, 2026
d6c85c6
fix: nil CELEnvironment in cmdeval test struct comparison
SurbhiAgarwal1 Mar 19, 2026
d73d928
fix: two e2e test failures in condition testdata
SurbhiAgarwal1 Mar 19, 2026
a15a358
fix: update condition testdata diff.patch with correct expected output
SurbhiAgarwal1 Mar 21, 2026
4157cd8
fix: correct e2e testdata and clarify k8s CEL library decision
SurbhiAgarwal1 Mar 26, 2026
24abdee
fix: update diff.patch with exact hashes from CI output
SurbhiAgarwal1 Mar 26, 2026
85a877f
feat: add k8s.io/apiserver CEL library extensions (IP, CIDR, Quantity…
SurbhiAgarwal1 Mar 28, 2026
836ab60
fix: correct SemVer function name to SemverLib in k8s CEL library
SurbhiAgarwal1 Mar 28, 2026
bc712d6
fix: increase reconcile-timeout from 2m to 5m in live-apply e2e tests
SurbhiAgarwal1 Mar 28, 2026
bc99a85
fix: address Copilot review comments
SurbhiAgarwal1 Mar 29, 2026
c6746cf
fix: address PR review feedback from mozesl-nokia and Copilot
SurbhiAgarwal1 Apr 2, 2026
aac01fc
Replace gcr.io container image references with ghcr.io (#4428)
aravindtga Mar 16, 2026
7104724
Proofreading of chapter 1.
mpgreaves Feb 26, 2026
7351b7c
Apply suggestions from code review
mpgreaves Mar 12, 2026
fd67e5d
Fix ci failure (#4435)
aravindtga Mar 18, 2026
a1346d1
simplify ImageResolveFunc
mozesl-nokia Mar 13, 2026
0cbdf6b
chore: trigger CI rebuild
SurbhiAgarwal1 Apr 3, 2026
5c734fb
chore: Remove unwanted files and fix test expectations
SurbhiAgarwal1 Apr 3, 2026
78a09a4
docs: add condition field documentation for CEL-based conditional fun…
SurbhiAgarwal1 Apr 3, 2026
119350b
Implement Kpt Function Conditional Rendering (Nephio #1084)
SurbhiAgarwal1 Apr 4, 2026
867945a
fix: correct condition-not-met expected diff.patch
SurbhiAgarwal1 Apr 7, 2026
95bcd15
fix: resolve lint warnings in condition_test.go
SurbhiAgarwal1 Apr 7, 2026
526232a
fix: add printer to context in condition_test.go
SurbhiAgarwal1 Apr 7, 2026
4524035
feat: Add CEL-based conditional function execution
SurbhiAgarwal1 Mar 17, 2026
db051eb
fix: remove k8s.io/apiserver dependency from CEL evaluator
SurbhiAgarwal1 Mar 19, 2026
a9f7a7e
refactor: move CELEnvironment to runneroptions, compile program per E…
SurbhiAgarwal1 Mar 19, 2026
7478240
Potential fix for pull request finding
SurbhiAgarwal1 Mar 19, 2026
6dd9355
refactor: replace Go unit e2e test with proper fn-render testdata
SurbhiAgarwal1 Mar 19, 2026
0733226
fix: remove k8s.io/apiserver from go.mod, fix celeval_test.go imports
SurbhiAgarwal1 Mar 19, 2026
5b1448f
fix: two e2e test failures in condition testdata
SurbhiAgarwal1 Mar 19, 2026
ac17a66
fix: update condition testdata diff.patch with correct expected output
SurbhiAgarwal1 Mar 21, 2026
3735f7c
fix: correct e2e testdata and clarify k8s CEL library decision
SurbhiAgarwal1 Mar 26, 2026
b12ce5f
fix: update diff.patch with exact hashes from CI output
SurbhiAgarwal1 Mar 26, 2026
63bdfcc
feat: add k8s.io/apiserver CEL library extensions (IP, CIDR, Quantity…
SurbhiAgarwal1 Mar 28, 2026
281016f
fix: correct SemVer function name to SemverLib in k8s CEL library
SurbhiAgarwal1 Mar 28, 2026
06e2896
fix: address Copilot review comments
SurbhiAgarwal1 Mar 29, 2026
747ec7c
fix: address PR review feedback from mozesl-nokia and Copilot
SurbhiAgarwal1 Apr 2, 2026
bfaff61
Fix #1407: Make 'kpt pkg get' use current directory when '.' is speci…
ciaranjohnston Dec 3, 2025
daf7063
Fix linting error: rewrite if-else to switch statement
ciaranjohnston Dec 3, 2025
88ed913
Fix test failures: check cleaned path for '.' and update test expecta…
ciaranjohnston Jan 21, 2026
36063d0
Updated the test checks to be cleaner and more accurate
ciaranjohnston Mar 15, 2026
c60056e
Removed unused variable
ciaranjohnston Mar 16, 2026
e9fac59
Replace gcr.io container image references with ghcr.io (#4428)
aravindtga Mar 16, 2026
79fc5f6
Proofreading of chapter 1.
mpgreaves Feb 26, 2026
5480903
Apply suggestions from code review
mpgreaves Mar 12, 2026
42435be
Made a minor amendment to the sentence structure.
mpgreaves Mar 12, 2026
8d85ff8
Fix ci failure (#4435)
aravindtga Mar 18, 2026
934e94f
Add RenderStatus to the Kptfile for per-function pipeline result trac…
aravindtga Apr 2, 2026
73a33a6
simplify ImageResolveFunc
mozesl-nokia Mar 13, 2026
b77541c
address copilot comments
mozesl-nokia Mar 13, 2026
72d8421
chore: trigger CI rebuild
SurbhiAgarwal1 Apr 3, 2026
6a99653
chore: Remove unwanted files and fix test expectations
SurbhiAgarwal1 Apr 3, 2026
15d41b2
Implement Kpt Function Conditional Rendering (Nephio #1084)
SurbhiAgarwal1 Apr 4, 2026
10897c2
fix: correct condition-not-met expected diff.patch
SurbhiAgarwal1 Apr 7, 2026
106fd8a
fix: resolve lint warnings in condition_test.go
SurbhiAgarwal1 Apr 7, 2026
30d68a1
fix: add printer to context in condition_test.go
SurbhiAgarwal1 Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions commands/fn/render/cmdrender.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ type Runner struct {

func (r *Runner) InitDefaults() {
r.RunnerOptions.InitDefaults(runneroptions.GHCRImagePrefix)
// Initialize CEL environment for condition evaluation
// Ignore error as conditions are optional; if CEL init fails, conditions will error at runtime
_ = r.RunnerOptions.InitCELEnvironment()
}

func (r *Runner) preRunE(_ *cobra.Command, args []string) error {
Expand Down
4 changes: 2 additions & 2 deletions documentation/content/en/book/01-getting-started/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ documents for [`kpt fn render`](../../reference/cli/fn/render/) and [`kpt fn eva

### Kubernetes cluster

To deploy the examples, you need a Kubernetes cluster and a configured kubectl context.
To deploy the examples, you need a Kubernetes cluster and a configured kubeconfig context.

For testing purposes, the [kind](https://kind.sigs.k8s.io/docs/user/quick-start/) tool is useful for running an ephemeral Kubernetes
cluster on your local host.
Expand Down Expand Up @@ -106,7 +106,7 @@ vim deployment.yaml
#### Automating one-time edits with functions

The [`kpt fn`](../../reference/cli/fn/) set of commands enables you to execute programs called _kpt functions_. These programs are
packaged as containers and take YAML files as input, mutate or validate them, and then output YAML.
packaged as containers and take in YAML files, mutate or validate them, and then output YAML.

For example, you can use a function (`ghcr.io/kptdev/krm-functions-catalog/search-replace:latest`) to search for and replace all the occurrences of the `app` key, in the `spec` section of the YAML document (`spec.**.app`), and set the value to `my-nginx`.

Expand Down
62 changes: 62 additions & 0 deletions documentation/content/en/book/04-using-functions/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,68 @@ will merge each function pipeline list as an associative list, using
`name` as the merge key. An unspecified `name` or duplicated names may
result in unexpected merges.

### Specifying `condition`

The `condition` field lets you skip a function based on the current state of the resources in the package.
It takes a [CEL](https://cel.dev/) expression that is evaluated against the resource list. If the expression
returns `true`, the function runs. If it returns `false`, the function is skipped.

The expression receives a variable called `resources`, which is a list of all KRM resources passed to
this function step (after `selectors` and `exclude` have been applied). Each resource is a map with
the standard fields: `apiVersion`, `kind`, `metadata`, `spec`, `status`.

For example, only run the `set-labels` function if a `ConfigMap` named `app-config` exists in the package:

```yaml
# wordpress/Kptfile (Excerpt)
apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: wordpress
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
app: wordpress
condition: resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')
```

When you render the package, kpt shows whether the function ran or was skipped:

```shell
$ kpt fn render wordpress
Package "wordpress":

[RUNNING] "ghcr.io/kptdev/krm-functions-catalog/set-labels:latest"
[PASS] "ghcr.io/kptdev/krm-functions-catalog/set-labels:latest"

Successfully executed 1 function(s) in 1 package(s).
```

If the condition is not met:

```shell
$ kpt fn render wordpress
Package "wordpress":

[SKIPPED] "ghcr.io/kptdev/krm-functions-catalog/set-labels:latest" (condition not met)

Successfully executed 1 function(s) in 1 package(s).
```

Some useful CEL expression patterns:

- Check if a resource of a specific kind exists:
`resources.exists(r, r.kind == 'Deployment')`
- Check if a specific resource exists by name:
`resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'my-config')`
- Check the count of resources:
`resources.filter(r, r.kind == 'Deployment').size() > 0`

The `condition` field can be combined with `selectors` and `exclude`. The condition is evaluated
after selectors and exclusions are applied, so `resources` only contains the resources that
passed the selection criteria.

### Specifying `selectors`

In some cases, you want to invoke the function only on a subset of resources based on a
Expand Down
10 changes: 10 additions & 0 deletions documentation/content/en/reference/schema/kptfile/kptfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,16 @@ definitions:
this is primarily used for merging function declaration with upstream counterparts
type: string
x-go-name: Name
condition:
description: |-
`Condition` is an optional CEL expression that determines whether this
function should be executed. The expression is evaluated against the list
of KRM resources passed to this function step (after `Selectors` and
`Exclude` have been applied) and should return a boolean value.
If omitted or evaluates to true, the function executes normally.
If evaluates to false, the function is skipped.
type: string
x-go-name: Condition
selectors:
description: |-
`Selectors` are used to specify resources on which the function should be executed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
actualStripLines:
- " stderr: 'WARNING: The requested image''s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested'"

stdErrStripLines:
- " Stderr:"
- " \"WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested\""

stdErr: |
Package: "condition-met"
[RUNNING] "ghcr.io/kptdev/krm-functions-catalog/no-op"
[PASS] "ghcr.io/kptdev/krm-functions-catalog/no-op" in 0s
Successfully executed 1 function(s) in 1 package(s).
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
diff --git a/Kptfile b/Kptfile
index eb90ac3..ace574a 100644
--- a/Kptfile
+++ b/Kptfile
@@ -5,4 +5,12 @@ metadata:
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/no-op
- condition: "resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')"
+ condition: resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')
+status:
+ conditions:
+ - type: Rendered
+ status: "True"
+ reason: RenderSuccess
+ renderStatus:
+ mutationSteps:
+ - image: ghcr.io/kptdev/krm-functions-catalog/no-op
+ exitCode: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.expected
8 changes: 8 additions & 0 deletions e2e/testdata/fn-render/condition/condition-met/Kptfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: app
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/no-op
condition: "resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')"
13 changes: 13 additions & 0 deletions e2e/testdata/fn-render/condition/condition-met/resources.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
key: value
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
actualStripLines:
- " stderr: 'WARNING: The requested image''s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested'"

stdErrStripLines:
- " Stderr:"
- " \"WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested\""

stdErr: |
Package: "condition-not-met"
[SKIPPED] "ghcr.io/kptdev/krm-functions-catalog/no-op" (condition not met)
Successfully executed 1 function(s) in 1 package(s).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the CI failures on this are legitimate. The Kptfile api has been updated to include the renderStatus field

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 19bf57c. I've updated both condition test cases to include the renderStatus field in the expected output. The condition-not-met test now shows empty mutationSteps (function skipped), and condition-met shows the function execution with exitCode 0.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
diff --git a/Kptfile b/Kptfile
index eb90ac3..ace574a 100644
--- a/Kptfile
+++ b/Kptfile
@@ -5,4 +5,9 @@ metadata:
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/no-op
- condition: "resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')"
+ condition: resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')
+status:
+ conditions:
+ - type: Rendered
+ status: "True"
+ reason: RenderSuccess
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.expected
8 changes: 8 additions & 0 deletions e2e/testdata/fn-render/condition/condition-not-met/Kptfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: app
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/no-op
condition: "resources.exists(r, r.kind == 'ConfigMap' && r.metadata.name == 'app-config')"
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
2 changes: 1 addition & 1 deletion e2e/testdata/live-apply/apply-depends-on/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ parallel: true
kptArgs:
- "live"
- "apply"
- "--reconcile-timeout=2m"
- "--reconcile-timeout=5m"

stdOut: |
inventory update started
Expand Down
2 changes: 1 addition & 1 deletion e2e/testdata/live-apply/json-output/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ kptArgs:
- "live"
- "apply"
- "--output=json"
- "--reconcile-timeout=2m"
- "--reconcile-timeout=5m"
stdOut: |
{"action":"Inventory","status":"Started","timestamp":"<TIMESTAMP>","type":"group"}
{"action":"Inventory","status":"Finished","timestamp":"<TIMESTAMP>","type":"group"}
Expand Down
8 changes: 8 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require (
github.com/bytecodealliance/wasmtime-go v1.0.0
github.com/cpuguy83/go-md2man/v2 v2.0.7
github.com/go-errors/errors v1.5.1
github.com/google/cel-go v0.26.0
github.com/google/go-cmp v0.7.0
github.com/google/go-containerregistry v0.20.6
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
Expand Down Expand Up @@ -42,9 +43,11 @@ require (
)

require (
cel.dev/expr v0.24.0 // indirect
cloud.google.com/go/compute/metadata v0.9.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
Expand Down Expand Up @@ -109,23 +112,28 @@ require (
github.com/sergi/go-diff v1.4.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spyzhov/ajson v0.9.6 // indirect
github.com/stoewer/go-strcase v1.3.0 // indirect
github.com/ulikunitz/xz v0.5.15 // indirect
github.com/vbatts/tar-split v0.12.2 // indirect
github.com/x448/float16 v0.8.4 // indirect
go.opentelemetry.io/otel v1.38.0 // indirect
go.opentelemetry.io/otel/trace v1.38.0 // indirect
go.yaml.in/yaml/v2 v2.4.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.32.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/term v0.37.0 // indirect
golang.org/x/time v0.14.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiserver v0.34.1
k8s.io/component-helpers v0.34.1 // indirect
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
Expand Down
21 changes: 21 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
Expand All @@ -6,6 +8,8 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
Expand Down Expand Up @@ -89,6 +93,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/cel-go v0.26.0 h1:DPGjXackMpJWH680oGY4lZhYjIameYmR+/6RBdDGmaI=
github.com/google/cel-go v0.26.0/go.mod h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PUIaryMM=
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
Expand Down Expand Up @@ -203,13 +209,20 @@ github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spyzhov/ajson v0.9.6 h1:iJRDaLa+GjhCDAt1yFtU/LKMtLtsNVKkxqlpvrHHlpQ=
github.com/spyzhov/ajson v0.9.6/go.mod h1:a6oSw0MMb7Z5aD2tPoPO+jq11ETKgXUr2XktHdT8Wt8=
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
Expand Down Expand Up @@ -239,6 +252,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
Expand Down Expand Up @@ -281,6 +296,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand All @@ -307,6 +326,8 @@ k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJb
k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc=
k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4=
k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
k8s.io/apiserver v0.34.1 h1:U3JBGdgANK3dfFcyknWde1G6X1F4bg7PXuvlqt8lITA=
k8s.io/apiserver v0.34.1/go.mod h1:eOOc9nrVqlBI1AFCvVzsob0OxtPZUCPiUJL45JOTBG0=
k8s.io/cli-runtime v0.34.1 h1:btlgAgTrYd4sk8vJTRG6zVtqBKt9ZMDeQZo2PIzbL7M=
k8s.io/cli-runtime v0.34.1/go.mod h1:aVA65c+f0MZiMUPbseU/M9l1Wo2byeaGwUuQEQVVveE=
k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY=
Expand Down
Loading
Loading