From df43cfc65d501cd800abaeec0ab9a33ba100db6d Mon Sep 17 00:00:00 2001 From: Nick Hale <4175918+njhale@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:07:11 -0500 Subject: [PATCH] enhance: set project default cc status field Signed-off-by: Nick Hale <4175918+njhale@users.noreply.github.com> --- pkg/project/handlers.go | 20 ++++++++++++++----- .../cc-missing/expected.golden | 10 +--------- .../spec-only/expected.golden | 11 +--------- .../spec-override/expected.golden | 11 +--------- .../status-only/expected.golden | 10 +--------- 5 files changed, 19 insertions(+), 43 deletions(-) diff --git a/pkg/project/handlers.go b/pkg/project/handlers.go index 1668a8b04..96308f7d6 100644 --- a/pkg/project/handlers.go +++ b/pkg/project/handlers.go @@ -7,6 +7,7 @@ import ( "github.com/acorn-io/baaah/pkg/router" apiv1 "github.com/acorn-io/runtime/pkg/apis/api.acorn.io/v1" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" + internaladminv1 "github.com/acorn-io/runtime/pkg/apis/internal.admin.acorn.io/v1" "github.com/acorn-io/runtime/pkg/computeclasses" "github.com/acorn-io/runtime/pkg/labels" corev1 "k8s.io/api/core/v1" @@ -18,7 +19,7 @@ import ( // SetDefaultComputeClass sets the default compute class status field of a [v1.ProjectInstance] to the value of its spec // field if set. -func SetDefaultComputeClass(req router.Request, resp router.Response) error { +func SetDefaultComputeClass(req router.Request, _ router.Response) error { project := req.Object.(*v1.ProjectInstance) if cc := project.Spec.DefaultComputeClass; cc != "" && project.Status.DefaultComputeClass != cc { // The spec has been changed, update the status field to match. @@ -26,10 +27,10 @@ func SetDefaultComputeClass(req router.Request, resp router.Response) error { } // Check if the given compute class exists - if project.Status.DefaultComputeClass != "" { - if _, err := computeclasses.GetAsProjectComputeClassInstance(req.Ctx, req.Client, project.Name, project.Status.DefaultComputeClass); err != nil { + if computeClassName := project.Status.DefaultComputeClass; computeClassName != "" { + if _, err := computeclasses.GetAsProjectComputeClassInstance(req.Ctx, req.Client, project.Name, computeClassName); 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) + return fmt.Errorf("failed to check existence of default compute class [%s] specified by project [%s] status: %w", computeClassName, project.Name, err) } // The compute class does not exist, clear the status field. @@ -37,7 +38,16 @@ func SetDefaultComputeClass(req router.Request, resp router.Response) error { } } - resp.Objects(req.Object) + // Pick a default from the available compute classes + if project.Status.DefaultComputeClass == "" { + computeClassName, err := internaladminv1.GetDefaultComputeClassName(req.Ctx, req.Client, project.Name) + if kclient.IgnoreNotFound(err) != nil { + return fmt.Errorf("failed to get default compute class for project [%s]: %w", project.Name, err) + } + + project.Status.DefaultComputeClass = computeClassName + } + return nil } diff --git a/pkg/project/testdata/setdefaultcomputeclass/cc-missing/expected.golden b/pkg/project/testdata/setdefaultcomputeclass/cc-missing/expected.golden index 7e6e9f223..e16c76dff 100644 --- a/pkg/project/testdata/setdefaultcomputeclass/cc-missing/expected.golden +++ b/pkg/project/testdata/setdefaultcomputeclass/cc-missing/expected.golden @@ -1,9 +1 @@ -`apiVersion: internal.acorn.io/v1 -kind: ProjectInstance -metadata: - creationTimestamp: null - name: acorn -spec: - defaultComputeClass: compute-class-a -status: {} -` +"" diff --git a/pkg/project/testdata/setdefaultcomputeclass/spec-only/expected.golden b/pkg/project/testdata/setdefaultcomputeclass/spec-only/expected.golden index 3f68667c2..e16c76dff 100644 --- a/pkg/project/testdata/setdefaultcomputeclass/spec-only/expected.golden +++ b/pkg/project/testdata/setdefaultcomputeclass/spec-only/expected.golden @@ -1,10 +1 @@ -`apiVersion: internal.acorn.io/v1 -kind: ProjectInstance -metadata: - creationTimestamp: null - name: acorn -spec: - defaultComputeClass: cluster-compute-class-b -status: - defaultComputeClass: cluster-compute-class-b -` +"" diff --git a/pkg/project/testdata/setdefaultcomputeclass/spec-override/expected.golden b/pkg/project/testdata/setdefaultcomputeclass/spec-override/expected.golden index 6f21e24c7..e16c76dff 100644 --- a/pkg/project/testdata/setdefaultcomputeclass/spec-override/expected.golden +++ b/pkg/project/testdata/setdefaultcomputeclass/spec-override/expected.golden @@ -1,10 +1 @@ -`apiVersion: internal.acorn.io/v1 -kind: ProjectInstance -metadata: - creationTimestamp: null - name: acorn -spec: - defaultComputeClass: compute-class-a -status: - defaultComputeClass: compute-class-a -` +"" diff --git a/pkg/project/testdata/setdefaultcomputeclass/status-only/expected.golden b/pkg/project/testdata/setdefaultcomputeclass/status-only/expected.golden index fa1c251fb..e16c76dff 100644 --- a/pkg/project/testdata/setdefaultcomputeclass/status-only/expected.golden +++ b/pkg/project/testdata/setdefaultcomputeclass/status-only/expected.golden @@ -1,9 +1 @@ -`apiVersion: internal.acorn.io/v1 -kind: ProjectInstance -metadata: - creationTimestamp: null - name: acorn -spec: {} -status: - defaultComputeClass: cluster-compute-class-b -` +""