Added functionality and API for pod autoscaling based on container resources
Signed-off-by: Arjun Naik <anaik@redhat.com>
This commit is contained in:
@@ -42,7 +42,7 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
|
||||
for resourceName, quantity := range requirements.Limits {
|
||||
fldPath := limPath.Key(string(resourceName))
|
||||
// Validate resource name.
|
||||
allErrs = append(allErrs, validateContainerResourceName(string(resourceName), fldPath)...)
|
||||
allErrs = append(allErrs, ValidateContainerResourceName(string(resourceName), fldPath)...)
|
||||
|
||||
// Validate resource quantity.
|
||||
allErrs = append(allErrs, ValidateResourceQuantityValue(string(resourceName), quantity, fldPath)...)
|
||||
@@ -51,7 +51,7 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
|
||||
for resourceName, quantity := range requirements.Requests {
|
||||
fldPath := reqPath.Key(string(resourceName))
|
||||
// Validate resource name.
|
||||
allErrs = append(allErrs, validateContainerResourceName(string(resourceName), fldPath)...)
|
||||
allErrs = append(allErrs, ValidateContainerResourceName(string(resourceName), fldPath)...)
|
||||
// Validate resource quantity.
|
||||
allErrs = append(allErrs, ValidateResourceQuantityValue(string(resourceName), quantity, fldPath)...)
|
||||
|
||||
@@ -70,7 +70,8 @@ func ValidateResourceRequirements(requirements *v1.ResourceRequirements, fldPath
|
||||
return allErrs
|
||||
}
|
||||
|
||||
func validateContainerResourceName(value string, fldPath *field.Path) field.ErrorList {
|
||||
// ValidateContainerResourceName checks the name of resource specified for a container
|
||||
func ValidateContainerResourceName(value string, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := validateResourceName(value, fldPath)
|
||||
if len(strings.Split(value, "/")) == 1 {
|
||||
if !helper.IsStandardContainerResourceName(value) {
|
||||
|
@@ -129,6 +129,62 @@ func TestValidateResourceRequirements(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateContainerResourceName(t *testing.T) {
|
||||
successCase := []struct {
|
||||
Name string
|
||||
ResourceName string
|
||||
}{
|
||||
{
|
||||
Name: "CPU resource",
|
||||
ResourceName: "cpu",
|
||||
},
|
||||
{
|
||||
Name: "Memory resource",
|
||||
ResourceName: "memory",
|
||||
},
|
||||
{
|
||||
Name: "Hugepages resource",
|
||||
ResourceName: "hugepages-2Mi",
|
||||
},
|
||||
{
|
||||
Name: "Namespaced resource",
|
||||
ResourceName: "kubernetes.io/resource-foo",
|
||||
},
|
||||
{
|
||||
Name: "Extended Resource",
|
||||
ResourceName: "my.org/resource-bar",
|
||||
},
|
||||
}
|
||||
for _, tc := range successCase {
|
||||
if errs := ValidateContainerResourceName(tc.ResourceName, field.NewPath(tc.ResourceName)); len(errs) != 0 {
|
||||
t.Errorf("%q unexpected error: %v", tc.Name, errs)
|
||||
}
|
||||
}
|
||||
|
||||
errorCase := []struct {
|
||||
Name string
|
||||
ResourceName string
|
||||
}{
|
||||
{
|
||||
Name: "Invalid standard resource",
|
||||
ResourceName: "cpu-core",
|
||||
},
|
||||
{
|
||||
Name: "Invalid namespaced resource",
|
||||
ResourceName: "kubernetes.io/",
|
||||
},
|
||||
{
|
||||
Name: "Invalid extended resource",
|
||||
ResourceName: "my.org-foo-resource",
|
||||
},
|
||||
}
|
||||
for _, tc := range errorCase {
|
||||
if errs := ValidateContainerResourceName(tc.ResourceName, field.NewPath(tc.ResourceName)); len(errs) == 0 {
|
||||
t.Errorf("%q expected error", tc.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidatePodLogOptions(t *testing.T) {
|
||||
|
||||
var (
|
||||
|
Reference in New Issue
Block a user