Commit Graph

132919 Commits

Author SHA1 Message Date
Lukasz Szaszkiewicz
4b3e562dc8 client-go/util/watchlist/watch_list: intro DoesClientNotSupportWatchListSemantics 2025-10-03 10:22:48 +02:00
Kubernetes Prow Robot
aa38aeaca2 Merge pull request #134390 from liggitt/metric-hidden-race
Use lock-free for unguarded isHidden/isDeprecated fields
2025-10-02 20:23:03 -07:00
Kubernetes Prow Robot
0dd78f632e Merge pull request #133747 from pohly/dra-e2e-crud-conformance
DRA: CRUD conformance tests
2025-10-02 20:22:56 -07:00
Kubernetes Prow Robot
ab89efc573 Merge pull request #134302 from lalitc375/device-class-selectors
feat(resource): Add validation for DeviceClass selectors and configs
2025-10-02 18:30:56 -07:00
Kubernetes Prow Robot
5c73384abb Merge pull request #134283 from natasha41575/ippr-tests
[InPlacePodVerticalScaling] refactor and increase coverage for pod resize tests
2025-10-02 17:39:10 -07:00
Kubernetes Prow Robot
5da3bd6eb5 Merge pull request #134127 from aojea/apiserver_noproxy
integration test: webhook proxy behavior
2025-10-02 17:38:58 -07:00
Kubernetes Prow Robot
d9405d9eaf Merge pull request #133394 from BenTheElder/invariants
check invariant metrics after e2e tests
2025-10-02 16:00:57 -07:00
Antonio Ojea
0b0a5974f8 integration test: webhook proxy behavior
adds a new integration test to verify that the API server's egress
to admission webhooks correctly respects the standard `HTTPS_PROXY`
and `NO_PROXY` environment variables.

It adds a new test util to implement a Fake DNS server that allows
to override DNS resolution in tests, specially useful for integration
test that can only bind to localhost the servers, that is ignored
by certain functionalities.
2025-10-02 22:31:08 +00:00
Jordan Liggitt
26c7846e6d Use lock-free for unguarded isHidden/isDeprecated fields 2025-10-02 18:11:59 -04:00
Benjamin Elder
52dec274b3 add TODO to migrate when new metrics mature and old metrics are deprecated 2025-10-02 15:03:29 -07:00
Benjamin Elder
7c529f25f4 add apiserver_validation_declarative_validation_panic_total invariant 2025-10-02 15:00:44 -07:00
Benjamin Elder
84ce0f57f2 add test to verify invariants are fully specified 2025-10-02 14:57:49 -07:00
Benjamin Elder
41ae5cdf4b check invariant metrics after e2e tests 2025-10-02 14:08:08 -07:00
Natasha Sarkar
748510b8ee refactor and increase coverage for pod resize tests 2025-10-02 20:47:40 +00:00
Kubernetes Prow Robot
a412a15109 Merge pull request #134304 from humblec/volume-fixes
Update CSI sidecar container images in test manifest
2025-10-02 13:00:57 -07:00
Kubernetes Prow Robot
16eebeb5ee Merge pull request #134379 from liggitt/gc-race
Lock all mutable fields when printing gc node
2025-10-02 11:40:56 -07:00
Kubernetes Prow Robot
14f808b041 Merge pull request #134310 from humblec/mod-update
cluster/addons: update container images to latest versions
2025-10-02 10:46:57 -07:00
Lalit Chauhan
f79fb9e59e Fix rebase issues 2025-10-02 17:23:25 +00:00
Patrick Ohly
f95d531b0a DRA: CRUD conformance tests
Promoting real tests turned out to be harder than expected (should be rewritten
to be self-contained, additional reviews, etc.).

They would not achieve 100% endpoint+operation coverage because real tests only
use some of the operations. Therefore each API type has to be covered with
CRUD-style tests which only exercise the apiserver, then maybe additional
functional tests can be added later (depending on time and motivation).

The machinery for testing different API types is meant to be reusable, so it
gets added in the new e2e/framework/conformance helper package.
2025-10-02 17:43:33 +02:00
Kubernetes Prow Robot
914f6f1116 Merge pull request #134201 from danwinship/conntrack-workaround
Update comments around an old bug workaround
2025-10-02 08:43:04 -07:00
Kubernetes Prow Robot
f86edc2665 Merge pull request #133929 from huww98/fix-pv-cache-race-v2
scheduler/volumebinding: passive assume cache
2025-10-02 08:42:56 -07:00
Kubernetes Prow Robot
62772eb633 Merge pull request #134377 from borg-land/cos-patch
upgrade to cos 121
2025-10-02 07:46:59 -07:00
Patrick Ohly
545526cfe0 DRA E2E: only check ResourceClaims in the test namespace
That was the original intent, but the implementation then ended up checking
ResourceClaims in all namespaces. Depending on timing this was merely
misleading (showing ResourceClaim changes from a different test running in
parallel), but with upcoming CRUD tests which intentionally set an allocation
result without a finalizer it breaks the non-CRUD tests when they check the
those CRUD ResourceClaims.
2025-10-02 16:07:48 +02:00
Patrick Ohly
2ac9ff1c1f test: format unstructured as YAML
It's a nested map which looks a lot nicer as YAML, in particular
when it represents a Kubernetes object.

Unit+integration tests using ktesting+gomega and E2E tests benefit from this
change.
2025-10-02 16:07:48 +02:00
upodroid
a7b720ad5b upgrade to cos 121 2025-10-02 16:57:10 +03:00
Jordan Liggitt
6d3d7553fb Lock all mutable fields when printing gc node 2025-10-02 08:50:17 -04:00
Kubernetes Prow Robot
8ac5701d3a Merge pull request #134052 from Jefftree/cle-tests-rename
Rename CLE test files
2025-10-02 00:11:03 -07:00
Kubernetes Prow Robot
c7f910ed1f Merge pull request #133762 from natasha41575/expandQuotaTests
[InPlacePodVerticalScaling] Expand coverage for resourceQuota and limitRanger e2e tests
2025-10-02 00:10:56 -07:00
Humble Devassy Chirammal
6e7762ef0e Update cluster/addons/ip-masq-agent/ip-masq-agent.yaml
Co-authored-by: Antonio Ojea <antonio.ojea.garcia@gmail.com>
2025-10-02 11:57:15 +05:30
Humble Devassy Chirammal
b5805f28e7 Update cluster/addons/kube-network-policies/kube-network-policies.yaml
Co-authored-by: Antonio Ojea <antonio.ojea.garcia@gmail.com>
2025-10-02 11:57:08 +05:30
Lalit Chauhan
c4c7efc4f9 apply feedback 2025-10-02 05:40:59 +00:00
Lalit Chauhan
515b579945 feat(resource): Add maxItems validation for DeviceClass configs 2025-10-02 05:40:58 +00:00
Lalit Chauhan
e693da7290 feat(resource): Add maxItems validation for DeviceClass selectors
This commit introduces a validation rule to limit the number of selectors
in a DeviceClass to 32. This is done by adding the `+k8s:maxItems=32`
marker to the DeviceClassSpec and running the code generator.

The following changes are included:
- Updated `staging/src/k8s.io/api/resource/v*/types.go` with the validation marker.
- Regenerated validation code in `pkg/apis/resource/v*/zz_generated.validations.go`.
- Improved error message in `pkg/apis/resource/validation/validation.go`.
- Added tests in `pkg/registry/resource/deviceclass/declarative_validation_test.go`
  to cover the new validation.
2025-10-02 05:40:58 +00:00
Kubernetes Prow Robot
48390fb98e Merge pull request #134347 from yongruilin/master_vg-cleanup
feat(validation-gen): Add "cohorts" & Tighten and simplify test framework
2025-10-01 16:40:56 -07:00
Kubernetes Prow Robot
0f8107c736 Merge pull request #134211 from aaron-prindle/resourceclaim_maxitems
Add declarative validation +k8s:maxItems tag to ResourceClaim
2025-10-01 15:22:56 -07:00
yongruilin
46c15a1844 fix typo in comment for namespace validation to appease verify-spelling 2025-10-01 22:04:12 +00:00
yongruilin
2fd76c8ed1 fix: Comment out ipSloppyValidator
It is currently not supported.
2025-10-01 21:38:57 +00:00
yongruilin
51f02aa58a fix: Update error origin in ValidateDNS1123Label to use k8s-short-name format 2025-10-01 21:10:07 +00:00
yongruilin
6b11e6433c run update-codegen to for ReplicationController 2025-10-01 20:42:23 +00:00
Kubernetes Prow Robot
5e0707e820 Merge pull request #134278 from raywainman/patch-4
Update SIG-Autoscaling Leads
2025-10-01 13:19:07 -07:00
Kubernetes Prow Robot
013ac7eaf6 Merge pull request #134257 from mayank-agrwl/debugsocket-contextual-logs
Add RunWithContext method for debugsocket
2025-10-01 13:18:59 -07:00
Tim Hockin
0a26ff5cb4 Update CSR DV test to match RC style
Once we go broad, people will copy these.  Let's make them easy to debug
:)
2025-10-01 19:45:37 +00:00
Tim Hockin
2d48dae391 Eliminate public ValidateReplicationControllerName
Everyone who referenced it now uses the underlying function.  Clearer
and frees me up to change objectMeta validation without impacting anyone
else.
2025-10-01 19:45:37 +00:00
Tim Hockin
229c6b13ca Validate ReplicationController.metadata.name
This relies on `+k8s:subfield` and validation cohorts.  The
`k8s:optional` ensures that we don't run the name validation if name is
empty, because core apimachinery will already flag it as Required().

This demonstrates some of the DV value - docs and clients are now (in
theory) able to see what RC's name format is.

Co-Authored-by: Yongrui Lin <yongrlin@outlook.com>
2025-10-01 19:45:37 +00:00
Tim Hockin
7cf9989222 Add ValidateObjectMetaWithOpts() to apimachinery
This new function does 1 main thing (changes how name validation works),
and the rest is future-proofing.  Specifically this changes the
signature of the name validation function.

Before: Name validation functions return `[]string` and apimachinery
logic wraps those in `field.Invalid()`.

Problem: This makes it hard to incrementally add declarative validation,
which needs access to potential name and generateName errors to set
origins properly.

After: New name validation functions return `field.ErrorList`, which can
be wrapped in trivial functions to do things like "mark as covered by
declarative" in just one place rather than for all types.

The "WithOpts" part of this gives us a new function name which isn't
horrible and is plausibly useful in the future.

Another notable change is that this no longer directly validates the
`generateName` field (but only on the new path -- existing code still
behaves the same).  From the code:

```
+   // generateName is not directly validated here. Types can have
+   // different rules for name generation, and the nameFn is for validating
+   // the post-generation data, not the input. In the past we assumed that
+   // name generation was always "append 5 random characters", but that's not
+   // NECESSARILY true. Also, the nameFn should always be considering the max
+   // length of the name, and it doesn't know enough about the name generation
+   // to do that. Also, given a bad generateName, the user will get errors
+   // for both the generateName and name fields. We will focus validation on
+   // the name field, which should give a better UX overall.
```

This also beefs up tests a bit.
2025-10-01 19:45:37 +00:00
Tim Hockin
b00e0f3020 Add cohort support to +k8s:item
Given:

```
   // +k8s:item(stringKey: "target", intKey: 42, boolKey: true)=+k8s:validateFalse="item Items[stringKey=target,intKey=42,boolKey=true] 1"
   // +k8s:item(stringKey: "target", intKey: 42, boolKey: true)=+k8s:validateFalse="item Items[stringKey=target,intKey=42,boolKey=true] 2"
   Items []Item `json:"items"`
```

...we get:

```
   func() { // cohort {"stringKey": "target", "intKey": 42, "boolKey": true}
       errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList {
           return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[stringKey=target,intKey=42,boolKey=true] 1")
       })...)
       errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList {
           return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[stringKey=target,intKey=42,boolKey=true] 2")
       })...)
   }()
```
2025-10-01 19:45:37 +00:00
Tim Hockin
975df59fcd Add cohort support to +k8s:subfield
Given:

```
    // +k8s:subfield(name)=+k8s:optional
    // +k8s:subfield(name)=+k8s:format=dns-label
    // +k8s:subfield(generateName)=+k8s:optional
    // +k8s:subfield(generateName)=+k8s:format=dns-label
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
```

...we get:

```
  errs = append(errs,
    func(fldPath *field.Path, obj, oldObj *metav1.ObjectMeta) (errs field.ErrorList) {
      func() { // cohort name
        if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.OptionalValue); len (e) != 0 {
          return // do not proceed
        }
        errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DNSLabel)...)
      }()
      func() { // cohort generateName
        if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "generateName", func(o *metav1.ObjectMeta) *string { return &o.GenerateName }, validate.OptionalValue); len(e) != 0
 {
          return // do not proceed
        }
        errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "generateName", func(o *metav1.ObjectMeta) *string { return &o.GenerateName }, validate.DNSLabel)...)
      }()
      return
    }(fldPath.Child("metadata"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *corev1.ReplicationController) *metav1.ObjectMeta { return &oldObj.ObjectMeta }))...)
```

It is worth noting that this only works one level deep:

```
    // +k8s:subfield(foo)=+k8s:subfield(bar)=+k8s:optional
    // +k8s:subfield(foo)=+k8s:subfield(bar)=+k8s:format=dns-label
    Field StructType
```

...will generate one cohort ("foo") with two distinct calls to Subfield,
so the optional will not short-circuit format.  If we need deeper
cohorting we need to either make subfield take multiple field names
(e.g. `subfield(foo.bar)` or `subbfield(foo, bar)`) or we need to
accumulate "structure" in addition to validator calls.  This is similar
to how we handle multiple `eachVal` tags - each one iterates the list.
2025-10-01 19:45:37 +00:00
Tim Hockin
efe4d17d15 Add support for validation cohorts
On a given field or type, there may be multiple "cohorts" of validation
which need to be processed together.  For example, a short-circuit
validation and a non-short-circuit for the same subfield.

The unnamed cohort (aka the default cohort) is first, followed by named
cohorts in order they are created.  Named cohorts are emitted as inline
functions, so early-return can be used.

This allows tags like k8s:subfield or k8s:item to generate cohorts
(named after the field's JSON name or the selector string,
respectively).

Subsequent commits will add support to those tags.

Co-Authored-by: Yongrui Lin <yongrlin@outlook.com>
2025-10-01 19:45:21 +00:00
yongruilin
8105dbe5bc Revert "Omit type names of emitted slice elements to appease gofmt"
This reverts commit 243f47f3b3.

Not needed anymore, now that gengo calls 'gofmt -s'
2025-10-01 19:30:27 +00:00
Tim Hockin
5d067af5e1 Prefactor: Fix some bad tests 2025-10-01 19:00:30 +00:00