api: introduce separate VolumeResourceRequirements struct
PVC and containers shared the same ResourceRequirements struct to define their API. When resource claims were added, that struct got extended, which accidentally also changed the PVC API. To avoid such a mistake from happening again, PVC now uses its own VolumeResourceRequirements struct. The `Claims` field gets removed because risk of breaking someone is low: theoretically, YAML files which have a claims field for volumes now get rejected when validating against the OpenAPI. Such files have never made sense and should be fixed. Code that uses the struct definitions needs to be updated.
This commit is contained in:
@@ -608,16 +608,6 @@ func dropDisabledDynamicResourceAllocationFields(podSpec, oldPodSpec *api.PodSpe
|
||||
dropEphemeralResourceClaimRequests(podSpec.EphemeralContainers)
|
||||
podSpec.ResourceClaims = nil
|
||||
}
|
||||
|
||||
// Setting VolumeClaimTemplate.Resources.Claims should have been
|
||||
// treated as an error by validation when extending
|
||||
// ResourceRequirements in 1.26. Now we can only accept it and drop the
|
||||
// field.
|
||||
for i := range podSpec.Volumes {
|
||||
if podSpec.Volumes[i].Ephemeral != nil && podSpec.Volumes[i].Ephemeral.VolumeClaimTemplate != nil {
|
||||
podSpec.Volumes[i].Ephemeral.VolumeClaimTemplate.Spec.Resources.Claims = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func dynamicResourceAllocationInUse(podSpec *api.PodSpec) bool {
|
||||
|
||||
@@ -1889,44 +1889,6 @@ func TestValidateTopologySpreadConstraintLabelSelectorOption(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropVolumesClaimField(t *testing.T) {
|
||||
pod := &api.Pod{
|
||||
Spec: api.PodSpec{
|
||||
Volumes: []api.Volume{
|
||||
{},
|
||||
{
|
||||
VolumeSource: api.VolumeSource{
|
||||
Ephemeral: &api.EphemeralVolumeSource{},
|
||||
},
|
||||
},
|
||||
{
|
||||
VolumeSource: api.VolumeSource{
|
||||
Ephemeral: &api.EphemeralVolumeSource{
|
||||
VolumeClaimTemplate: &api.PersistentVolumeClaimTemplate{
|
||||
Spec: api.PersistentVolumeClaimSpec{
|
||||
Resources: api.ResourceRequirements{
|
||||
Claims: []api.ResourceClaim{
|
||||
{Name: "dra"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
DropDisabledPodFields(pod, nil)
|
||||
|
||||
for i, volume := range pod.Spec.Volumes {
|
||||
if volume.Ephemeral != nil && volume.Ephemeral.VolumeClaimTemplate != nil && volume.Ephemeral.VolumeClaimTemplate.Spec.Resources.Claims != nil {
|
||||
t.Errorf("volume #%d: Resources.Claim should be nil", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropInPlacePodVerticalScaling(t *testing.T) {
|
||||
podWithInPlaceVerticalScaling := func() *api.Pod {
|
||||
return &api.Pod{
|
||||
|
||||
@@ -504,7 +504,7 @@ func TestWarnings(t *testing.T) {
|
||||
Spec: api.PodSpec{Volumes: []api.Volume{
|
||||
{Name: "ephemeral-volume", VolumeSource: api.VolumeSource{Ephemeral: &api.EphemeralVolumeSource{
|
||||
VolumeClaimTemplate: &api.PersistentVolumeClaimTemplate{
|
||||
Spec: api.PersistentVolumeClaimSpec{Resources: api.ResourceRequirements{
|
||||
Spec: api.PersistentVolumeClaimSpec{Resources: api.VolumeResourceRequirements{
|
||||
Requests: api.ResourceList{api.ResourceStorage: resource.MustParse("200Mi")}}},
|
||||
},
|
||||
}}}}},
|
||||
@@ -518,7 +518,7 @@ func TestWarnings(t *testing.T) {
|
||||
Spec: api.PodSpec{Volumes: []api.Volume{
|
||||
{Name: "ephemeral-volume", VolumeSource: api.VolumeSource{Ephemeral: &api.EphemeralVolumeSource{
|
||||
VolumeClaimTemplate: &api.PersistentVolumeClaimTemplate{
|
||||
Spec: api.PersistentVolumeClaimSpec{Resources: api.ResourceRequirements{
|
||||
Spec: api.PersistentVolumeClaimSpec{Resources: api.VolumeResourceRequirements{
|
||||
Requests: api.ResourceList{api.ResourceStorage: resource.MustParse("200m")}}},
|
||||
},
|
||||
}}}}},
|
||||
|
||||
Reference in New Issue
Block a user