Skip to content

Commit 5cfaf47

Browse files
update allocated resources status validation to account for claims
1 parent aed81e5 commit 5cfaf47

File tree

2 files changed

+132
-8
lines changed

2 files changed

+132
-8
lines changed

pkg/apis/core/validation/validation.go

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8260,17 +8260,39 @@ func validateContainerStatusAllocatedResourcesStatus(containerStatuses []core.Co
82608260
// ignore missing container, see https://github.com/kubernetes/kubernetes/issues/124915
82618261
if containerFound {
82628262
found := false
8263+
var errorStr string
82638264

8264-
// get container resources from the spec
8265-
containerResources := container.Resources
8266-
for resourceName := range containerResources.Requests {
8267-
if resourceName == allocatedResource.Name {
8268-
found = true
8269-
break
8265+
if strings.HasPrefix(string(allocatedResource.Name), "claim:") {
8266+
// assume it is a claim name
8267+
8268+
errorStr = "must match one of the container's resource claims in a format 'claim:<claimName>/<request>' or 'claim:<claimName>' if request is empty"
8269+
8270+
for _, c := range container.Resources.Claims {
8271+
name := "claim:" + c.Name
8272+
if c.Request != "" {
8273+
name += "/" + c.Request
8274+
}
8275+
8276+
if name == string(allocatedResource.Name) {
8277+
found = true
8278+
break
8279+
}
8280+
}
8281+
8282+
} else {
8283+
// assume it is a resource name
8284+
8285+
errorStr = "must match one of the container's resource requests"
8286+
8287+
for resourceName := range container.Resources.Requests {
8288+
if resourceName == allocatedResource.Name {
8289+
found = true
8290+
break
8291+
}
82708292
}
82718293
}
82728294
if !found {
8273-
allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("name"), allocatedResource.Name, "must match one of the container's resource requirements"))
8295+
allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("name"), allocatedResource.Name, errorStr))
82748296
}
82758297
}
82768298

pkg/apis/core/validation/validation_test.go

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24772,7 +24772,109 @@ func TestValidateContainerStatusAllocatedResourcesStatus(t *testing.T) {
2477224772
},
2477324773
},
2477424774
wantFieldErrors: field.ErrorList{
24775-
field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(1).Child("name"), core.ResourceName("test.device/test2"), "must match one of the container's resource requirements"),
24775+
field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(1).Child("name"), core.ResourceName("test.device/test2"), "must match one of the container's resource requests"),
24776+
},
24777+
},
24778+
24779+
"allow claims and request that are in spec": {
24780+
containers: []core.Container{
24781+
{
24782+
Name: "container-1",
24783+
Resources: core.ResourceRequirements{
24784+
Claims: []core.ResourceClaim{
24785+
{
24786+
Name: "claim.name",
24787+
Request: "request.name",
24788+
},
24789+
},
24790+
},
24791+
},
24792+
},
24793+
containerStatuses: []core.ContainerStatus{
24794+
{
24795+
Name: "container-1",
24796+
AllocatedResourcesStatus: []core.ResourceStatus{
24797+
{
24798+
Name: "claim:claim.name/request.name",
24799+
Resources: []core.ResourceHealth{
24800+
{
24801+
ResourceID: "driver/pool/device-name",
24802+
Health: core.ResourceHealthStatusHealthy,
24803+
},
24804+
},
24805+
},
24806+
},
24807+
},
24808+
},
24809+
wantFieldErrors: field.ErrorList{},
24810+
},
24811+
24812+
"allow claims that are in spec without the request": {
24813+
containers: []core.Container{
24814+
{
24815+
Name: "container-1",
24816+
Resources: core.ResourceRequirements{
24817+
Claims: []core.ResourceClaim{
24818+
{
24819+
Name: "claim.name",
24820+
},
24821+
},
24822+
},
24823+
},
24824+
},
24825+
containerStatuses: []core.ContainerStatus{
24826+
{
24827+
Name: "container-1",
24828+
AllocatedResourcesStatus: []core.ResourceStatus{
24829+
{
24830+
Name: "claim:claim.name",
24831+
Resources: []core.ResourceHealth{
24832+
{
24833+
ResourceID: "driver/pool/device-name",
24834+
Health: core.ResourceHealthStatusHealthy,
24835+
},
24836+
},
24837+
},
24838+
},
24839+
},
24840+
},
24841+
wantFieldErrors: field.ErrorList{},
24842+
},
24843+
24844+
"don't allow claims that are not in spec": {
24845+
containers: []core.Container{
24846+
{
24847+
Name: "container-1",
24848+
Resources: core.ResourceRequirements{
24849+
Claims: []core.ResourceClaim{
24850+
{
24851+
Name: "other-claim.name",
24852+
},
24853+
},
24854+
Requests: core.ResourceList{
24855+
"claim.name": resource.MustParse("1"),
24856+
},
24857+
},
24858+
},
24859+
},
24860+
containerStatuses: []core.ContainerStatus{
24861+
{
24862+
Name: "container-1",
24863+
AllocatedResourcesStatus: []core.ResourceStatus{
24864+
{
24865+
Name: "claim:claim.name",
24866+
Resources: []core.ResourceHealth{
24867+
{
24868+
ResourceID: "driver/pool/device-name",
24869+
Health: core.ResourceHealthStatusHealthy,
24870+
},
24871+
},
24872+
},
24873+
},
24874+
},
24875+
},
24876+
wantFieldErrors: field.ErrorList{
24877+
field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(0).Child("name"), core.ResourceName("claim:claim.name"), "must match one of the container's resource claims in a format 'claim:<claimName>/<request>' or 'claim:<claimName>' if request is empty"),
2477624878
},
2477724879
},
2477824880

0 commit comments

Comments
 (0)