Skip to content

Commit 88cd652

Browse files
committed
Read resources from multiple files
1 parent 4ceeccb commit 88cd652

File tree

4 files changed

+169
-44
lines changed

4 files changed

+169
-44
lines changed

cmd/print.go

Lines changed: 94 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package cmd
1919
import (
2020
"fmt"
2121
"os"
22+
"path/filepath"
2223
"slices"
2324
"strings"
2425

@@ -49,8 +50,11 @@ type PrintRunner struct {
4950
// Defaults to YAML.
5051
outputFormat string
5152

52-
// The path to the input yaml config file. Value assigned via --input-file flag
53-
inputFile string
53+
// inputFiles contains the paths to YAML manifest files to process. Value assigned via --input-files flag.
54+
inputPaths []string
55+
56+
// recursive enables recursive directory traversal when using --input-dir.
57+
recursive bool
5458

5559
// The namespace used to query Gateway API objects. Value assigned via
5660
// --namespace/-n flag.
@@ -88,7 +92,55 @@ func (pr *PrintRunner) PrintGatewayAPIObjects(cmd *cobra.Command, _ []string) er
8892
return fmt.Errorf("failed to initialize namespace filter: %w", err)
8993
}
9094

91-
gatewayResources, notificationTablesMap, err := i2gw.ToGatewayAPIResources(cmd.Context(), pr.namespaceFilter, pr.inputFile, pr.providers, pr.getProviderSpecificFlags())
95+
allFiles := []string{}
96+
97+
for _, path := range pr.inputPaths {
98+
// Check if path is a directory
99+
if info, err := os.Stat(path); err == nil && info.IsDir() {
100+
// Discover manifest files in directory
101+
dirFiles, err := discoverManifestFiles(path, pr.recursive)
102+
if err != nil {
103+
return fmt.Errorf("error reading directory %s: %w", path, err)
104+
}
105+
allFiles = append(allFiles, dirFiles...)
106+
} else {
107+
allFiles = append(allFiles, path)
108+
}
109+
}
110+
111+
if len(allFiles) > 0 {
112+
for _, inputFile := range allFiles {
113+
fmt.Fprintf(os.Stdout, "=== File: %s ===\n", inputFile)
114+
gatewayResources, notificationTablesMap, err := i2gw.ToGatewayAPIResources(
115+
cmd.Context(),
116+
pr.namespaceFilter,
117+
inputFile,
118+
pr.providers,
119+
pr.getProviderSpecificFlags(),
120+
)
121+
122+
for _, table := range notificationTablesMap {
123+
fmt.Fprintln(os.Stderr, table)
124+
}
125+
126+
if err != nil {
127+
fmt.Fprintf(os.Stdout, "# Error: %v\n", err)
128+
} else {
129+
pr.outputResult(gatewayResources)
130+
}
131+
132+
fmt.Fprintf(os.Stdout, "=== End: %s ===\n\n", inputFile)
133+
}
134+
return nil
135+
}
136+
137+
gatewayResources, notificationTablesMap, err := i2gw.ToGatewayAPIResources(
138+
cmd.Context(),
139+
pr.namespaceFilter,
140+
"",
141+
pr.providers,
142+
pr.getProviderSpecificFlags(),
143+
)
92144
if err != nil {
93145
return err
94146
}
@@ -281,16 +333,18 @@ func (pr *PrintRunner) initializeResourcePrinter() error {
281333
// 3. If namespace is specified, it filters resources based on that namespace.
282334
// 4. If no namespace is specified and reading from the cluster, it attempts to get the namespace from the cluster; if unsuccessful, initialization fails.
283335
func (pr *PrintRunner) initializeNamespaceFilter() error {
336+
hasFileInput := len(pr.inputPaths) > 0
337+
284338
// When we should use all namespaces, empty string is used as the filter.
285-
if pr.allNamespaces || (pr.inputFile != "" && pr.namespace == "") {
339+
if pr.allNamespaces || (hasFileInput && pr.namespace == "") {
286340
pr.namespaceFilter = ""
287341
return nil
288342
}
289343

290344
// If namespace flag is not specified, try to use the default namespace from the cluster
291345
if pr.namespace == "" {
292346
ns, err := getNamespaceInCurrentContext()
293-
if err != nil && pr.inputFile == "" {
347+
if err != nil && len(pr.inputPaths) == 0 {
294348
// When asked to read from the cluster, but getting the current namespace
295349
// failed for whatever reason - do not process the request.
296350
return err
@@ -326,8 +380,11 @@ func newPrintCommand() *cobra.Command {
326380
cmd.Flags().StringVarP(&pr.outputFormat, "output", "o", "yaml",
327381
"Output format. One of: (yaml, json, kyaml).")
328382

329-
cmd.Flags().StringVar(&pr.inputFile, "input-file", "",
330-
`Path to the manifest file. When set, the tool will read ingresses from the file instead of reading from the cluster. Supported files are yaml and json.`)
383+
cmd.Flags().StringSliceVar(&pr.inputPaths, "input-file", []string{},
384+
`Path to manifest file(s) or directory(s). When set, the tool will read ingresses from the specified files or all YAML files in directories. Supported files are yaml and json.`)
385+
386+
cmd.Flags().BoolVar(&pr.recursive, "recursive", false,
387+
`When used with --input-file, recursively explore nested directories.`)
331388

332389
cmd.Flags().StringVarP(&pr.namespace, "namespace", "n", "",
333390
`If present, the namespace scope for this CLI request.`)
@@ -397,3 +454,33 @@ func PrintUnstructuredAsYaml(obj *unstructured.Unstructured) error {
397454

398455
return nil
399456
}
457+
458+
// discoverManifestFiles finds all manifest files in a directory
459+
func discoverManifestFiles(dir string, recursive bool) ([]string, error) {
460+
var files []string
461+
462+
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
463+
if err != nil {
464+
return err
465+
}
466+
467+
// Skip other directories if not in recursive mode
468+
if info.IsDir() && !recursive && path != dir {
469+
return filepath.SkipDir
470+
}
471+
472+
if !info.IsDir() && isManifestFile(path) {
473+
files = append(files, path)
474+
}
475+
476+
return nil
477+
})
478+
479+
return files, err
480+
}
481+
482+
// isManifestFile checks if a file is a YAML or JSON manifest
483+
func isManifestFile(path string) bool {
484+
ext := strings.ToLower(filepath.Ext(path))
485+
return ext == ".yaml" || ext == ".yml" || ext == ".json"
486+
}

cmd/print_test.go

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,14 @@ func Test_getNamespaceFilter(t *testing.T) {
149149

150150
for _, tc := range testCases {
151151
t.Run(tc.name, func(t *testing.T) {
152+
var inputPaths []string
153+
if tc.inputfile != "" {
154+
inputPaths = []string{tc.inputfile}
155+
}
152156
pr := PrintRunner{
153157
namespace: tc.namespace,
154158
allNamespaces: tc.allNamespaces,
155-
inputFile: tc.inputfile,
159+
inputPaths: inputPaths,
156160
}
157161
err = pr.initializeNamespaceFilter()
158162

@@ -320,3 +324,73 @@ func Test_getProviderSpecificFlags(t *testing.T) {
320324
})
321325
}
322326
}
327+
328+
func TestDiscoverManifestFiles(t *testing.T) {
329+
tmpDir := t.TempDir()
330+
subDir := filepath.Join(tmpDir, "subdir")
331+
nestedDir := filepath.Join(subDir, "nested")
332+
os.MkdirAll(nestedDir, 0755)
333+
files := map[string]string{
334+
"test1.yaml": "test",
335+
"test2.yml": "test",
336+
"test3.json": "test",
337+
//.txt should be ignored
338+
"test4.txt": "test",
339+
//to test --recursive
340+
"subdir/sub.yaml": "test",
341+
"subdir/nested/deep.yml": "test",
342+
"subdir/nested/config.json": "test",
343+
}
344+
345+
for path, content := range files {
346+
fullPath := filepath.Join(tmpDir, path)
347+
os.WriteFile(fullPath, []byte(content), 0644)
348+
}
349+
350+
tests := []struct {
351+
name string
352+
recursive bool
353+
wantCount int
354+
}{
355+
{"non-recursive finds only top level", false, 3},
356+
{"recursive finds all manifest files", true, 6},
357+
}
358+
359+
for _, tt := range tests {
360+
t.Run(tt.name, func(t *testing.T) {
361+
filesFound, err := discoverManifestFiles(tmpDir, tt.recursive)
362+
if err != nil {
363+
t.Fatalf("Unexpected error: %v", err)
364+
}
365+
if len(filesFound) != tt.wantCount {
366+
t.Errorf("Expected %d files, got %d", tt.wantCount, len(filesFound))
367+
}
368+
})
369+
}
370+
371+
// To test non-existing directory
372+
_, err := discoverManifestFiles("/non/existent/path", false)
373+
if err == nil {
374+
t.Error("Expected error for non-existent directory")
375+
}
376+
}
377+
378+
func TestIsManifestFile(t *testing.T) {
379+
tests := []struct {
380+
path string
381+
want bool
382+
}{
383+
{"test.yaml", true},
384+
{"test.yml", true},
385+
{"test.json", true},
386+
{"test.txt", false},
387+
{"test", false},
388+
}
389+
390+
for _, tt := range tests {
391+
got := isManifestFile(tt.path)
392+
if got != tt.want {
393+
t.Errorf("isManifestFile(%q) = %v, want %v", tt.path, got, tt.want)
394+
}
395+
}
396+
}

go.mod

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ require (
2626

2727
require (
2828
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
29-
github.com/blang/semver/v4 v4.0.0 // indirect
3029
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
3130
github.com/invopop/yaml v0.2.0 // indirect
3231
github.com/mattn/go-runewidth v0.0.15 // indirect
@@ -48,33 +47,26 @@ require (
4847
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
4948
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
5049
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
51-
github.com/go-errors/errors v1.5.1 // indirect
5250
github.com/go-logr/logr v1.4.2 // indirect
5351
github.com/go-openapi/jsonpointer v0.21.0 // indirect
5452
github.com/go-openapi/jsonreference v0.21.0 // indirect
5553
github.com/go-openapi/swag v0.23.0 // indirect
5654
github.com/gogo/protobuf v1.3.2 // indirect
5755
github.com/golang/protobuf v1.5.4 // indirect
58-
github.com/google/btree v1.1.3 // indirect
5956
github.com/google/gnostic-models v0.7.0 // indirect
6057
github.com/google/uuid v1.6.0 // indirect
61-
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
6258
github.com/inconshreveable/mousetrap v1.1.0 // indirect
6359
github.com/josharian/intern v1.0.0 // indirect
6460
github.com/json-iterator/go v1.1.12 // indirect
6561
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
6662
github.com/mailru/easyjson v0.7.7 // indirect
6763
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
6864
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
69-
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
7065
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
71-
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
7266
github.com/pkg/errors v0.9.1 // indirect
7367
github.com/spf13/pflag v1.0.6 // indirect
74-
github.com/xlab/treeprint v1.2.0 // indirect
7568
golang.org/x/net v0.38.0 // indirect
7669
golang.org/x/oauth2 v0.27.0 // indirect
77-
golang.org/x/sync v0.12.0 // indirect
7870
golang.org/x/sys v0.31.0 // indirect
7971
golang.org/x/term v0.30.0 // indirect
8072
golang.org/x/text v0.23.0 // indirect
@@ -87,7 +79,5 @@ require (
8779
k8s.io/klog/v2 v2.130.1
8880
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
8981
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
90-
sigs.k8s.io/kustomize/api v0.20.1 // indirect
91-
sigs.k8s.io/kustomize/kyaml v0.20.1 // indirect
9282
sigs.k8s.io/yaml v1.6.0 // indirect
9383
)

go.sum

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ github.com/GoogleCloudPlatform/gke-gateway-api v1.3.0 h1:4WjH6dFtnezCFiYlbmq0SBF
44
github.com/GoogleCloudPlatform/gke-gateway-api v1.3.0/go.mod h1:IFDp1XhE20jjqWG3o2ocYoz33nCH6HC4rJ6Hdag4y1M=
55
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
66
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
7-
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
8-
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
97
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
108
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
119
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -23,8 +21,6 @@ github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sa
2321
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
2422
github.com/getkin/kin-openapi v0.124.0 h1:VSFNMB9C9rTKBnQ/fpyDU8ytMTr4dWI9QovSKj9kz/M=
2523
github.com/getkin/kin-openapi v0.124.0/go.mod h1:wb1aSZA/iWmorQP9KTAS/phLj/t17B5jT7+fS8ed9NM=
26-
github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
27-
github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
2824
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
2925
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
3026
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
@@ -43,8 +39,6 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
4339
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
4440
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
4541
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
46-
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
47-
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
4842
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
4943
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
5044
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -54,8 +48,6 @@ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgY
5448
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
5549
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
5650
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
57-
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
58-
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
5951
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
6052
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
6153
github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY=
@@ -89,8 +81,6 @@ github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFd
8981
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
9082
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
9183
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
92-
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
93-
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
9484
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
9585
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
9686
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
@@ -102,8 +92,6 @@ github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw=
10292
github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
10393
github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s=
10494
github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw=
105-
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
106-
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
10795
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
10896
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
10997
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -124,8 +112,6 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN
124112
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
125113
github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
126114
github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
127-
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
128-
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
129115
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
130116
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
131117
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
@@ -134,19 +120,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
134120
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
135121
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
136122
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
137-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
138123
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
139124
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
140125
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
141126
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
142127
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
143128
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
144-
github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
145-
github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
146129
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
147130
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
148-
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
149-
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
150131
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
151132
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
152133
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
@@ -173,8 +154,6 @@ golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT
173154
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
174155
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
175156
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
176-
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
177-
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
178157
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
179158
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
180159
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -210,7 +189,6 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSP
210189
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
211190
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
212191
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
213-
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
214192
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
215193
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
216194
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -242,10 +220,6 @@ sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM=
242220
sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs=
243221
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
244222
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
245-
sigs.k8s.io/kustomize/api v0.20.1 h1:iWP1Ydh3/lmldBnH/S5RXgT98vWYMaTUL1ADcr+Sv7I=
246-
sigs.k8s.io/kustomize/api v0.20.1/go.mod h1:t6hUFxO+Ph0VxIk1sKp1WS0dOjbPCtLJ4p8aADLwqjM=
247-
sigs.k8s.io/kustomize/kyaml v0.20.1 h1:PCMnA2mrVbRP3NIB6v9kYCAc38uvFLVs8j/CD567A78=
248-
sigs.k8s.io/kustomize/kyaml v0.20.1/go.mod h1:0EmkQHRUsJxY8Ug9Niig1pUMSCGHxQ5RklbpV/Ri6po=
249223
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
250224
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
251225
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=

0 commit comments

Comments
 (0)