Adding ResourceRequirementSpec to v1beta1, v1beta2, and v1beta3 APIs. The old resource

quantities 'CPU' and 'Memory' will be preserved until support for v1beta1 and v1beta2 APIs are
dropped.
Improved resource validation in the process.
This commit is contained in:
Vishnu Kannan
2015-01-25 04:19:36 +00:00
parent aa3b45d17b
commit 5e36f63f8b
23 changed files with 782 additions and 175 deletions

View File

@@ -268,6 +268,13 @@ func TestValidatePullPolicy(t *testing.T) {
}
func getResourceLimits(cpu, memory string) api.ResourceList {
res := api.ResourceList{}
res[api.ResourceCPU] = resource.MustParse(cpu)
res[api.ResourceMemory] = resource.MustParse(memory)
return res
}
func TestValidateContainers(t *testing.T) {
volumes := util.StringSet{}
capabilities.SetForTests(capabilities.Capabilities{
@@ -287,6 +294,17 @@ func TestValidateContainers(t *testing.T) {
},
},
},
{
Name: "resources-test",
Image: "image",
Resources: api.ResourceRequirementSpec{
Limits: api.ResourceList{
api.ResourceName(api.ResourceCPU): resource.MustParse("10"),
api.ResourceName(api.ResourceMemory): resource.MustParse("10G"),
api.ResourceName("my.org/resource"): resource.MustParse("10m"),
},
},
},
{Name: "abc-1234", Image: "image", Privileged: true},
}
if errs := validateContainers(successCase, volumes); len(errs) != 0 {
@@ -349,6 +367,35 @@ func TestValidateContainers(t *testing.T) {
"privilege disabled": {
{Name: "abc", Image: "image", Privileged: true},
},
"invalid compute resource": {
{
Name: "abc-123",
Image: "image",
Resources: api.ResourceRequirementSpec{
Limits: api.ResourceList{
"disk": resource.MustParse("10G"),
},
},
},
},
"Resource CPU invalid": {
{
Name: "abc-123",
Image: "image",
Resources: api.ResourceRequirementSpec{
Limits: getResourceLimits("-10", "0"),
},
},
},
"Resource Memory invalid": {
{
Name: "abc-123",
Image: "image",
Resources: api.ResourceRequirementSpec{
Limits: getResourceLimits("0", "-10"),
},
},
},
}
for k, v := range errorCases {
if errs := validateContainers(v, volumes); len(errs) == 0 {
@@ -422,8 +469,12 @@ func TestValidateManifest(t *testing.T) {
Image: "image",
Command: []string{"foo", "bar"},
WorkingDir: "/tmp",
Memory: resource.MustParse("1"),
CPU: resource.MustParse("1"),
Resources: api.ResourceRequirementSpec{
Limits: api.ResourceList{
"cpu": resource.MustParse("1"),
"memory": resource.MustParse("1"),
},
},
Ports: []api.Port{
{Name: "p1", ContainerPort: 80, HostPort: 8080},
{Name: "p2", ContainerPort: 81},
@@ -711,7 +762,9 @@ func TestValidatePodUpdate(t *testing.T) {
Containers: []api.Container{
{
Image: "foo:V1",
CPU: resource.MustParse("100m"),
Resources: api.ResourceRequirementSpec{
Limits: getResourceLimits("100m", "0"),
},
},
},
},
@@ -722,7 +775,9 @@ func TestValidatePodUpdate(t *testing.T) {
Containers: []api.Container{
{
Image: "foo:V2",
CPU: resource.MustParse("1000m"),
Resources: api.ResourceRequirementSpec{
Limits: getResourceLimits("1000m", "0"),
},
},
},
},
@@ -1675,8 +1730,6 @@ func TestValidateResourceNames(t *testing.T) {
{"", false},
{".", false},
{"..", false},
{"kubernetes.io/cpu", true},
{"kubernetes.io/disk", false},
{"my.favorite.app.co/12345", true},
{"my.favorite.app.co/_12345", false},
{"my.favorite.app.co/12345_", false},
@@ -1687,7 +1740,7 @@ func TestValidateResourceNames(t *testing.T) {
{"kubernetes.io/will/not/work/", false},
}
for _, item := range table {
err := ValidateResourceName(item.input)
err := validateResourceName(item.input)
if len(err) != 0 && item.success {
t.Errorf("expected no failure for input %q", item.input)
} else if len(err) == 0 && !item.success {