Skip to content

Commit 1230ba6

Browse files
committed
add api-server and k8s version to the property
Signed-off-by: Ryan Zhang <yangzhangrice@hotmail.com>
1 parent 2fd4460 commit 1230ba6

File tree

12 files changed

+484
-50
lines changed

12 files changed

+484
-50
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# Implementation: Kubernetes Version Collection with TTL Caching
2+
3+
## Overview
4+
Add a `collectK8sVersion` function to the Azure property provider that collects the Kubernetes server version using the discoveryClient with a 15-minute TTL cache to minimize API calls.
5+
6+
## Plan
7+
8+
### Phase 1: Add Cache Fields
9+
**Task 1.1: Add cache-related fields to PropertyProvider struct**
10+
- Add `cachedK8sVersion` string field to store the cached version
11+
- Add `k8sVersionCacheTime` time.Time field to track when the cache was last updated
12+
- Add `k8sVersionCacheTTL` time.Duration field set to 15 minutes
13+
- Add a mutex for thread-safe access to cached values
14+
15+
### Phase 2: Implement collectK8sVersion Function
16+
**Task 2.1: Implement the collectK8sVersion function**
17+
- Check if cached version exists and is still valid (within TTL)
18+
- If cache is valid, return cached version
19+
- If cache is expired or empty, call discoveryClient.ServerVersion()
20+
- Update cache with new version and current timestamp
21+
- Return the version as a property with observation time
22+
23+
### Phase 3: Integrate into Collect Method
24+
**Task 3.1: Call collectK8sVersion in Collect method**
25+
- Add call to collectK8sVersion in the Collect method
26+
- Store the k8s version in the properties map
27+
28+
### Phase 4: Write Unit Tests
29+
**Task 4.1: Create unit tests for collectK8sVersion**
30+
- Test cache hit scenario (cached version within TTL)
31+
- Test cache miss scenario (no cached version)
32+
- Test cache expiration scenario (cached version expired)
33+
- Test error handling from discoveryClient
34+
- Test thread safety of cache access
35+
36+
### Phase 5: Verify Tests Pass
37+
**Task 5.1: Run unit tests**
38+
- Execute `go test` for the provider package
39+
- Verify all tests pass
40+
41+
## Success Criteria
42+
- [x] Cache fields added to PropertyProvider struct
43+
- [x] collectK8sVersion function implemented with TTL logic
44+
- [x] Function integrated into Collect method
45+
- [x] Unit tests created and passing
46+
- [x] Thread-safe implementation verified
47+
48+
## Implementation Notes
49+
- Using sync.RWMutex for thread-safe cache access
50+
- TTL set to 15 minutes as specified
51+
- Uses the standard `propertyprovider.K8sVersionProperty` constant instead of creating a new one
52+
- Changed `discoveryClient` field type from `discovery.DiscoveryInterface` to `discovery.ServerVersionInterface` for better testability and to only depend on the interface we actually need
53+
- Fixed test nil pointer issue by conditionally setting the discoveryClient field only when it's non-nil
54+
55+
## Final Implementation Summary
56+
All tasks completed successfully. The `collectK8sVersion` function now:
57+
1. Caches the Kubernetes version with a 15-minute TTL
58+
2. Uses thread-safe mutex locks for concurrent access
59+
3. Properly handles nil discovery client cases
60+
4. Returns early if cache is still valid to minimize API calls
61+
5. Updates cache atomically when fetching new version
62+
6. Has comprehensive unit tests covering all scenarios including cache hits, misses, expiration, errors, and concurrency
63+
64+
## Integration Test Updates
65+
Updated integration tests to ignore the new k8s version property in comparisons:
66+
- Added `ignoreK8sVersionProperty` using `cmpopts.IgnoreMapEntries` to filter out the k8s version from test expectations
67+
- Integration tests now pass successfully (33 specs all passed)
68+
- The k8s version is being collected correctly from the test Kubernetes environment, validating the implementation works end-to-end
69+
70+
## Test Results
71+
- Unit tests: ✅ 8/8 passed (7 in TestCollectK8sVersion + 1 in TestCollectK8sVersionConcurrency)
72+
- Integration tests: ✅ 33/33 specs passed
73+
- All scenarios validated including cache behavior, TTL expiration, error handling, and thread safety
74+
75+
## Refactoring
76+
Simplified the implementation by removing the `k8sVersionCacheTTL` instance field from PropertyProvider:
77+
- Removed the `k8sVersionCacheTTL time.Duration` field from the struct
78+
- Updated `collectK8sVersion` to use the `K8sVersionCacheTTL` constant directly
79+
- Removed field initialization from `New()` and `NewWithPricingProvider()` constructors
80+
- Updated unit tests to remove the field from test PropertyProvider instances
81+
- All tests still pass after refactoring ✅

apis/placement/v1beta1/zz_generated.deepcopy.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@ require (
2424
golang.org/x/sync v0.15.0
2525
golang.org/x/time v0.11.0
2626
gomodules.xyz/jsonpatch/v2 v2.4.0
27-
k8s.io/api v0.32.3
27+
k8s.io/api v0.33.0
2828
k8s.io/apiextensions-apiserver v0.32.3
29-
k8s.io/apimachinery v0.32.3
30-
k8s.io/client-go v0.32.3
29+
k8s.io/apimachinery v0.33.0
30+
k8s.io/client-go v0.33.0
3131
k8s.io/component-base v0.32.3
3232
k8s.io/component-helpers v0.32.3
3333
k8s.io/klog/v2 v2.130.1
3434
k8s.io/metrics v0.25.2
3535
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e
3636
sigs.k8s.io/cloud-provider-azure v1.32.4
3737
sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.20
38-
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848
38+
sigs.k8s.io/cluster-inventory-api v0.0.0-20251028164203-2e3fabb46733
3939
sigs.k8s.io/controller-runtime v0.20.4
4040
)
4141

@@ -60,21 +60,19 @@ require (
6060
github.com/beorn7/perks v1.0.1 // indirect
6161
github.com/cespare/xxhash/v2 v2.3.0 // indirect
6262
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
63-
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
63+
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
6464
github.com/fsnotify/fsnotify v1.9.0 // indirect
6565
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
6666
github.com/go-logr/logr v1.4.3 // indirect
6767
github.com/go-logr/zapr v1.3.0 // indirect
68-
github.com/go-openapi/jsonpointer v0.21.0 // indirect
68+
github.com/go-openapi/jsonpointer v0.21.1 // indirect
6969
github.com/go-openapi/jsonreference v0.21.0 // indirect
7070
github.com/go-openapi/swag v0.23.1 // indirect
7171
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
7272
github.com/gogo/protobuf v1.3.2 // indirect
7373
github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
74-
github.com/golang/protobuf v1.5.4 // indirect
7574
github.com/google/btree v1.1.3 // indirect
76-
github.com/google/gnostic-models v0.6.8 // indirect
77-
github.com/google/gofuzz v1.2.0 // indirect
75+
github.com/google/gnostic-models v0.6.9 // indirect
7876
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
7977
github.com/google/uuid v1.6.0 // indirect
8078
github.com/inconshreveable/mousetrap v1.1.0 // indirect
@@ -106,7 +104,7 @@ require (
106104
golang.org/x/crypto v0.38.0 // indirect
107105
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
108106
golang.org/x/net v0.40.0 // indirect
109-
golang.org/x/oauth2 v0.27.0 // indirect
107+
golang.org/x/oauth2 v0.29.0 // indirect
110108
golang.org/x/sys v0.33.0 // indirect
111109
golang.org/x/term v0.32.0 // indirect
112110
golang.org/x/text v0.25.0 // indirect
@@ -115,10 +113,11 @@ require (
115113
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
116114
gopkg.in/inf.v0 v0.9.1 // indirect
117115
gopkg.in/yaml.v3 v3.0.1 // indirect
118-
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
119-
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
116+
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
117+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
120118
sigs.k8s.io/karpenter v1.5.0 // indirect
121-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
119+
sigs.k8s.io/randfill v1.0.0 // indirect
120+
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
122121
sigs.k8s.io/yaml v1.4.0 // indirect
123122
)
124123

go.sum

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
105105
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
106106
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
107107
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
108-
github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
109-
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
108+
github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
109+
github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
110110
github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=
111111
github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
112112
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
@@ -131,8 +131,8 @@ github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC0
131131
github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo=
132132
github.com/go-openapi/errors v0.22.1 h1:kslMRRnK7NCb/CvR1q1VWuEQCEIsBGn5GgKD9e+HYhU=
133133
github.com/go-openapi/errors v0.22.1/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0=
134-
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
135-
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
134+
github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic=
135+
github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk=
136136
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
137137
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
138138
github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco=
@@ -161,12 +161,10 @@ github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXe
161161
github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
162162
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
163163
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
164-
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
165-
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
166164
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
167165
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
168-
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
169-
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
166+
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
167+
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
170168
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
171169
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
172170
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
@@ -257,6 +255,8 @@ github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wx
257255
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
258256
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
259257
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
258+
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
259+
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
260260
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
261261
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
262262
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
@@ -323,8 +323,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
323323
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
324324
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
325325
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
326-
golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M=
327-
golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
326+
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
327+
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
328328
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
329329
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
330330
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -373,14 +373,14 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
373373
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
374374
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
375375
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
376-
k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
377-
k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
376+
k8s.io/api v0.33.0 h1:yTgZVn1XEe6opVpP1FylmNrIFWuDqe2H0V8CT5gxfIU=
377+
k8s.io/api v0.33.0/go.mod h1:CTO61ECK/KU7haa3qq8sarQ0biLq2ju405IZAd9zsiM=
378378
k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY=
379379
k8s.io/apiextensions-apiserver v0.32.3/go.mod h1:8YwcvVRMVzw0r1Stc7XfGAzB/SIVLunqApySV5V7Dss=
380-
k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U=
381-
k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
382-
k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
383-
k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
380+
k8s.io/apimachinery v0.33.0 h1:1a6kHrJxb2hs4t8EE5wuR/WxKDwGN1FKH3JvDtA0CIQ=
381+
k8s.io/apimachinery v0.33.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
382+
k8s.io/client-go v0.33.0 h1:UASR0sAYVUzs2kYuKn/ZakZlcs2bEHaizrrHUZg0G98=
383+
k8s.io/client-go v0.33.0/go.mod h1:kGkd+l/gNGg8GYWAPr0xF1rRKvVWvzh9vmZAMXtaKOg=
384384
k8s.io/cloud-provider v0.32.3 h1:WC7KhWrqXsU4b0E4tjS+nBectGiJbr1wuc1TpWXvtZM=
385385
k8s.io/cloud-provider v0.32.3/go.mod h1:/fwBfgRPuh16n8vLHT+PPT+Bc4LAEaJYj38opO2wsYY=
386386
k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k=
@@ -391,8 +391,8 @@ k8s.io/csi-translation-lib v0.32.3 h1:fKdc9LMVEMk18xsgoPm1Ga8GjfhI7AM3UX8gnIeXZK
391391
k8s.io/csi-translation-lib v0.32.3/go.mod h1:VX6+hCKgQyFnUX3VrnXZAgYYBXkrqx4BZk9vxr9qRcE=
392392
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
393393
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
394-
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
395-
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
394+
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
395+
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
396396
k8s.io/metrics v0.25.2 h1:105TuPaIFfr4EHzN56WwZJO7r1UesuDytNTzeMqGySo=
397397
k8s.io/metrics v0.25.2/go.mod h1:4NDAauOuEJ+NWO2+hWkhFE4rWBx/plLWJOYU3vGl0sA=
398398
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro=
@@ -403,15 +403,18 @@ sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.20 h1:aVSc4LFdBVlrhlldIzPo4Nr
403403
sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.20/go.mod h1:OkkCYstvomfIwV4rvVIegymcgMnt7ZQ3+1Wi9WZmP1s=
404404
sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.5.2 h1:jjFJF0PmS9IHLokD41mM6RVoqQF3BQtVDmQd6ZMnN6E=
405405
sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.5.2/go.mod h1:7DdZ9ipIsmPLpBlfT4gueejcUlJBZQKWhdljQE5SKvc=
406-
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848 h1:WYPi2PdQyZwZkHG648v2jQl6deyCgyjJ0fkLYgUJ618=
407-
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848/go.mod h1:/aN4e7RWOMHgT4xAjCNkV4YFcpKfpZCeumMIL7S+KNM=
406+
sigs.k8s.io/cluster-inventory-api v0.0.0-20251028164203-2e3fabb46733 h1:l90ANqblqFrE4L2QLLk+9iPjfmaLRvOFL51l/fgwUgg=
407+
sigs.k8s.io/cluster-inventory-api v0.0.0-20251028164203-2e3fabb46733/go.mod h1:guwenlZ9iIfYlNxn7ExCfugOLTh6wjjRX3adC36YCmQ=
408408
sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU=
409409
sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
410-
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
411-
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
410+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
411+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
412412
sigs.k8s.io/karpenter v1.5.0 h1:3HaFtFvkteUJ+SjIViR1ImR0qR+GTqDulahauIuE4Qg=
413413
sigs.k8s.io/karpenter v1.5.0/go.mod h1:YuqGoQsLti+V7ugHQVGXuT4v1QwCMiKloHLcPDfwMbY=
414-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
415-
sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
414+
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
415+
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
416+
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
417+
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 h1:IUA9nvMmnKWcj5jl84xn+T5MnlZKThmUW1TdblaLVAc=
418+
sigs.k8s.io/structured-merge-diff/v4 v4.6.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
416419
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
417420
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=

0 commit comments

Comments
 (0)