DRA: remove "source" indirection from v1 Pod API

This makes the API nicer:

    resourceClaims:
    - name: with-template
      resourceClaimTemplateName: test-inline-claim-template
    - name: with-claim
      resourceClaimName: test-shared-claim

Previously, this was:

    resourceClaims:
    - name: with-template
      source:
        resourceClaimTemplateName: test-inline-claim-template
    - name: with-claim
      source:
        resourceClaimName: test-shared-claim

A more long-term benefit is that other, future alternatives
might not make sense under the "source" umbrella.

This is a breaking change. It's justified because DRA is still
alpha and will have several other API breaks in 1.31.
This commit is contained in:
Patrick Ohly
2024-05-24 15:24:24 +02:00
parent bb95d084a2
commit bde9b64cdf
209 changed files with 117866 additions and 2126 deletions

View File

@@ -3020,7 +3020,7 @@ func validatePodResourceClaim(podMeta *metav1.ObjectMeta, claim core.PodResource
nameErrs := ValidateDNS1123Label(claim.Name, fldPath.Child("name"))
if len(nameErrs) > 0 {
allErrs = append(allErrs, nameErrs...)
} else if podMeta != nil && claim.Source.ResourceClaimTemplateName != nil {
} else if podMeta != nil && claim.ResourceClaimTemplateName != nil {
claimName := podMeta.Name + "-" + claim.Name
for _, detail := range ValidateResourceClaimName(claimName, false) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), claimName, "final ResourceClaim name: "+detail))
@@ -3028,27 +3028,20 @@ func validatePodResourceClaim(podMeta *metav1.ObjectMeta, claim core.PodResource
}
podClaimNames.Insert(claim.Name)
}
allErrs = append(allErrs, validatePodResourceClaimSource(claim.Source, fldPath.Child("source"))...)
return allErrs
}
func validatePodResourceClaimSource(claimSource core.ClaimSource, fldPath *field.Path) field.ErrorList {
var allErrs field.ErrorList
if claimSource.ResourceClaimName != nil && claimSource.ResourceClaimTemplateName != nil {
allErrs = append(allErrs, field.Invalid(fldPath, claimSource, "at most one of `resourceClaimName` or `resourceClaimTemplateName` may be specified"))
if claim.ResourceClaimName != nil && claim.ResourceClaimTemplateName != nil {
allErrs = append(allErrs, field.Invalid(fldPath, claim, "at most one of `resourceClaimName` or `resourceClaimTemplateName` may be specified"))
}
if claimSource.ResourceClaimName == nil && claimSource.ResourceClaimTemplateName == nil {
allErrs = append(allErrs, field.Invalid(fldPath, claimSource, "must specify one of: `resourceClaimName`, `resourceClaimTemplateName`"))
if claim.ResourceClaimName == nil && claim.ResourceClaimTemplateName == nil {
allErrs = append(allErrs, field.Invalid(fldPath, claim, "must specify one of: `resourceClaimName`, `resourceClaimTemplateName`"))
}
if claimSource.ResourceClaimName != nil {
for _, detail := range ValidateResourceClaimName(*claimSource.ResourceClaimName, false) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimName"), *claimSource.ResourceClaimName, detail))
if claim.ResourceClaimName != nil {
for _, detail := range ValidateResourceClaimName(*claim.ResourceClaimName, false) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimName"), *claim.ResourceClaimName, detail))
}
}
if claimSource.ResourceClaimTemplateName != nil {
for _, detail := range ValidateResourceClaimTemplateName(*claimSource.ResourceClaimTemplateName, false) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimTemplateName"), *claimSource.ResourceClaimTemplateName, detail))
if claim.ResourceClaimTemplateName != nil {
for _, detail := range ValidateResourceClaimTemplateName(*claim.ResourceClaimTemplateName, false) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimTemplateName"), *claim.ResourceClaimTemplateName, detail))
}
}
return allErrs

View File

@@ -22650,8 +22650,8 @@ func TestValidateOSFields(t *testing.T) {
"PriorityClassName",
"ReadinessGates",
"ResourceClaims[*].Name",
"ResourceClaims[*].Source.ResourceClaimName",
"ResourceClaims[*].Source.ResourceClaimTemplateName",
"ResourceClaims[*].ResourceClaimName",
"ResourceClaims[*].ResourceClaimTemplateName",
"RestartPolicy",
"RuntimeClassName",
"SchedulerName",
@@ -25857,9 +25857,6 @@ func TestValidatePVSecretReference(t *testing.T) {
func TestValidateDynamicResourceAllocation(t *testing.T) {
externalClaimName := "some-claim"
externalClaimTemplateName := "some-claim-template"
goodClaimSource := core.ClaimSource{
ResourceClaimName: &externalClaimName,
}
shortPodName := &metav1.ObjectMeta{
Name: "some-pod",
}
@@ -25871,10 +25868,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim-template",
Source: core.ClaimSource{
ResourceClaimTemplateName: &externalClaimTemplateName,
},
Name: "my-claim-template",
ResourceClaimTemplateName: &externalClaimTemplateName,
}},
}
goodClaimReference := core.PodSpec{
@@ -25882,10 +25877,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim-reference",
Source: core.ClaimSource{
ResourceClaimName: &externalClaimName,
},
Name: "my-claim-reference",
ResourceClaimName: &externalClaimName,
}},
}
@@ -25897,11 +25890,11 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}, {
Name: "another-claim",
Source: goodClaimSource,
Name: "another-claim",
ResourceClaimName: &externalClaimName,
}},
},
"init container": {
@@ -25910,8 +25903,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
}
@@ -25929,8 +25922,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "../my-claim",
Source: goodClaimSource,
Name: "../my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"pod claim name with path": {
@@ -25938,8 +25931,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my/claim",
Source: goodClaimSource,
Name: "my/claim",
ResourceClaimName: &externalClaimName,
}},
},
"pod claim name empty": {
@@ -25947,8 +25940,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "",
Source: goodClaimSource,
Name: "",
ResourceClaimName: &externalClaimName,
}},
},
"duplicate pod claim entries": {
@@ -25956,11 +25949,11 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}, {
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"resource claim source empty": {
@@ -25968,8 +25961,7 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: core.ClaimSource{},
Name: "my-claim",
}},
},
"resource claim reference and template": {
@@ -25977,11 +25969,9 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: core.ClaimSource{
ResourceClaimName: &externalClaimName,
ResourceClaimTemplateName: &externalClaimTemplateName,
},
Name: "my-claim",
ResourceClaimName: &externalClaimName,
ResourceClaimTemplateName: &externalClaimTemplateName,
}},
},
"claim not found": {
@@ -25989,8 +25979,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"claim name empty": {
@@ -25998,8 +25988,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"pod claim name duplicates": {
@@ -26007,8 +25997,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"no claims defined": {
@@ -26021,11 +26011,11 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}, {
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"ephemeral container don't support resource requirements": {
@@ -26034,20 +26024,20 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
RestartPolicy: core.RestartPolicyAlways,
DNSPolicy: core.DNSClusterFirst,
ResourceClaims: []core.PodResourceClaim{{
Name: "my-claim",
Source: goodClaimSource,
Name: "my-claim",
ResourceClaimName: &externalClaimName,
}},
},
"invalid claim template name": func() core.PodSpec {
spec := goodClaimTemplate.DeepCopy()
notLabel := ".foo_bar"
spec.ResourceClaims[0].Source.ResourceClaimTemplateName = &notLabel
spec.ResourceClaims[0].ResourceClaimTemplateName = &notLabel
return *spec
}(),
"invalid claim reference name": func() core.PodSpec {
spec := goodClaimReference.DeepCopy()
notLabel := ".foo_bar"
spec.ResourceClaims[0].Source.ResourceClaimName = &notLabel
spec.ResourceClaims[0].ResourceClaimName = &notLabel
return *spec
}(),
}