Move resource.Quantity rounding to defaulter

This commit is contained in:
Clayton Coleman 2016-10-14 00:51:04 -04:00
parent 07bd50be0d
commit 5b18b4e515
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
3 changed files with 40 additions and 3 deletions

View File

@ -739,15 +739,15 @@ func Convert_v1_ResourceList_To_api_ResourceList(in *ResourceList, out *api.Reso
if *in == nil {
return nil
}
if *out == nil {
*out = make(api.ResourceList, len(*in))
}
for key, val := range *in {
// Moved to defaults
// TODO(#18538): We round up resource values to milli scale to maintain API compatibility.
// In the future, we should instead reject values that need rounding.
const milliScale = -3
val.RoundUp(milliScale)
// const milliScale = -3
// val.RoundUp(milliScale)
(*out)[api.ResourceName(key)] = val
}

View File

@ -52,9 +52,21 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
SetDefaults_LimitRangeItem,
SetDefaults_ConfigMap,
SetDefaults_RBDVolumeSource,
SetDefaults_ResourceList,
)
}
func SetDefaults_ResourceList(obj *ResourceList) {
for key, val := range *obj {
// TODO(#18538): We round up resource values to milli scale to maintain API compatibility.
// In the future, we should instead reject values that need rounding.
const milliScale = -3
val.RoundUp(milliScale)
(*obj)[ResourceName(key)] = val
}
}
func SetDefaults_PodExecOptions(obj *PodExecOptions) {
obj.Stdout = true
obj.Stderr = true

View File

@ -574,6 +574,31 @@ func TestSetDefaultObjectFieldSelectorAPIVersion(t *testing.T) {
}
}
func TestSetMinimumScalePod(t *testing.T) {
// verify we default if limits are specified (and that request=0 is preserved)
s := versioned.PodSpec{}
s.Containers = []versioned.Container{
{
Resources: versioned.ResourceRequirements{
Requests: versioned.ResourceList{
versioned.ResourceMemory: resource.MustParse("1n"),
},
Limits: versioned.ResourceList{
versioned.ResourceCPU: resource.MustParse("2n"),
},
},
},
}
pod := &versioned.Pod{
Spec: s,
}
versioned.SetObjectDefaults_Pod(pod)
if expect := resource.MustParse("1m"); expect.Cmp(pod.Spec.Containers[0].Resources.Requests[versioned.ResourceMemory]) != 0 {
t.Errorf("did not round resources: %#v", pod.Spec.Containers[0].Resources)
}
}
func TestSetDefaultRequestsPod(t *testing.T) {
// verify we default if limits are specified (and that request=0 is preserved)
s := versioned.PodSpec{}