Skip to content
This repository has been archived by the owner on Mar 16, 2024. It is now read-only.

Enable setting a default ComputeClass on projects #2470

Closed
wants to merge 10 commits into from
Prev Previous commit
Next Next commit
test: default cc project spec and status fields
Add tests and update affected goldenfiles.

Signed-off-by: Nick Hale <4175918+njhale@users.noreply.github.com>
  • Loading branch information
njhale committed Feb 20, 2024
commit f2425ae97d0d75c411e92394d449e75d0bccd420
4 changes: 2 additions & 2 deletions pkg/apis/internal.admin.acorn.io/v1/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func getCurrentClusterComputeClassDefault(ctx context.Context, c client.Client,
defaultCCC = z.Pointer(clusterComputeClass)
}

if clusterComputeClass.Name == projectDefault {
if projectDefault != "" && clusterComputeClass.Name == projectDefault {
projectDefaultCCC = z.Pointer(clusterComputeClass)
}
}
Expand Down Expand Up @@ -68,7 +68,7 @@ func getCurrentProjectComputeClassDefault(ctx context.Context, c client.Client,
defaultPCC = z.Pointer(projectComputeClass)
}

if projectDefault projectComputeClass.Name == projectDefault {
if projectDefault != "" && projectComputeClass.Name == projectDefault {
projectDefaultPCC = z.Pointer(projectComputeClass)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ status:
resolvedOfferings:
containers:
"":
class: sample-compute-class
memory: 0
left:
class: sample-compute-class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ status:
resolvedOfferings:
containers:
"":
class: sample-compute-class
memory: 0
left:
class: sample-compute-class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ status:
resolvedOfferings:
containers:
"":
class: sample-compute-class
memory: 0
left:
class: sample-compute-class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,8 @@ description: Simple description for a simple ComputeClass
cpuScaler: 0.25
default: true
priorityClassName: does-not-exist
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@ description: Simple description for a simple ComputeClass
cpuScaler: 0.25
default: true
priorityClassName: exists
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,9 @@ affinity:
- key: foo
operator: In
values:
- bar
- bar
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@ affinity:
- key: foo
operator: In
values:
- bar
- bar
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,9 @@ affinity:
- key: foo
operator: In
values:
- bar
- bar
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
5 changes: 5 additions & 0 deletions pkg/controller/scheduling/testdata/memory/job/existing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: app-namespace
5 changes: 2 additions & 3 deletions pkg/project/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,14 @@ import (
// field if set.
func SetDefaultComputeClass(req router.Request, resp router.Response) error {
project := req.Object.(*v1.ProjectInstance)
if cc := project.Spec.DefaultComputeClass; cc != "" &&
project.Status.DefaultComputeClass != cc {
if cc := project.Spec.DefaultComputeClass; cc != "" && project.Status.DefaultComputeClass != cc {
// The spec has been changed, update the status field to match.
project.Status.DefaultComputeClass = cc
}

// Check if the given compute class exists
if project.Status.DefaultComputeClass != "" {
if _, err := computeclasses.GetAsProjectComputeClassInstance(req.Ctx, req.Client, project.Status.Namespace, project.Status.DefaultComputeClass); err != nil {
if _, err := computeclasses.GetAsProjectComputeClassInstance(req.Ctx, req.Client, project.Name, project.Status.DefaultComputeClass); err != nil {
if !apierrors.IsNotFound(err) {
return fmt.Errorf("failed to check existence of default compute class on project [%s] status: %w", project.Name, err)
}
Expand Down
7 changes: 7 additions & 0 deletions pkg/project/handlers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ import (
kclient "sigs.k8s.io/controller-runtime/pkg/client"
)

func TestDefaultComputeClass(t *testing.T) {
tester.DefaultTest(t, scheme.Scheme, "testdata/setdefaultcomputeclass/cc-missing", SetDefaultComputeClass)
tester.DefaultTest(t, scheme.Scheme, "testdata/setdefaultcomputeclass/spec-only", SetDefaultComputeClass)
tester.DefaultTest(t, scheme.Scheme, "testdata/setdefaultcomputeclass/status-only", SetDefaultComputeClass)
tester.DefaultTest(t, scheme.Scheme, "testdata/setdefaultcomputeclass/spec-override", SetDefaultComputeClass)
}

func TestSetProjectSupportedRegions(t *testing.T) {
tester.DefaultTest(t, scheme.Scheme, "testdata/setsupportedregions/no-default", SetSupportedRegions)
tester.DefaultTest(t, scheme.Scheme, "testdata/setsupportedregions/with-supported-regions", SetSupportedRegions)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
`apiVersion: internal.acorn.io/v1
kind: ProjectInstance
metadata:
creationTimestamp: null
name: acorn
spec:
defaultComputeClass: compute-class-a
status: {}
`
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: acorn
spec:
defaultComputeClass: compute-class-a
status:
defaultComputeClass: compute-class-a
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
kind: ProjectComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: compute-class-a
namespace: acorn
cpuScaler: 0.25
memory:
min: 1Mi # 1Mi
max: 2Mi # 2Mi
default: 1Mi # 1Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
---
kind: ClusterComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: cluster-compute-class-b
cpuScaler: 0.25
memory:
min: 1Mi # 1Mi
max: 2Mi # 2Mi
default: 1Mi # 1Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: acorn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
`apiVersion: internal.acorn.io/v1
kind: ProjectInstance
metadata:
creationTimestamp: null
name: acorn
spec:
defaultComputeClass: cluster-compute-class-b
status:
defaultComputeClass: cluster-compute-class-b
`
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: acorn
spec:
defaultComputeClass: cluster-compute-class-b
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
kind: ProjectComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: compute-class-a
namespace: acorn
cpuScaler: 0.25
memory:
min: 1Mi # 1Mi
max: 2Mi # 2Mi
default: 1Mi # 1Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
---
kind: ClusterComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: cluster-compute-class-b
cpuScaler: 0.25
memory:
min: 1Mi # 1Mi
max: 2Mi # 2Mi
default: 1Mi # 1Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: acorn
status:
defaultComputeClass: cluster-compute-class-b
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
`apiVersion: internal.acorn.io/v1
kind: ProjectInstance
metadata:
creationTimestamp: null
name: acorn
spec:
defaultComputeClass: compute-class-a
status:
defaultComputeClass: compute-class-a
`
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: acorn
spec:
defaultComputeClass: compute-class-a
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
kind: ProjectComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: compute-class-a
namespace: acorn
cpuScaler: 0.25
memory:
min: 1Mi # 1Mi
max: 2Mi # 2Mi
default: 1Mi # 1Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
---
kind: ClusterComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: cluster-compute-class-b
cpuScaler: 0.25
memory:
min: 1Mi # 1Mi
max: 2Mi # 2Mi
default: 1Mi # 1Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
---
kind: ProjectInstance
apiVersion: internal.acorn.io/v1
metadata:
name: acorn
status:
defaultComputeClass: cluster-compute-class-b
Loading