From 58af11f9bd3d6a051069f36134de33945e084b6b Mon Sep 17 00:00:00 2001 From: Nick Hale <4175918+njhale@users.noreply.github.com> Date: Wed, 31 Jan 2024 21:41:41 -0500 Subject: [PATCH] enhance: factor project default cc into default cc selection Signed-off-by: Nick Hale <4175918+njhale@users.noreply.github.com> --- .../internal.admin.acorn.io/v1/default.go | 50 +++++++++++++++---- .../expected.golden | 1 - .../compute-class-default/expected.golden | 1 - .../expected.golden | 1 - 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/pkg/apis/internal.admin.acorn.io/v1/default.go b/pkg/apis/internal.admin.acorn.io/v1/default.go index 4ddc9707d..90b803fe3 100644 --- a/pkg/apis/internal.admin.acorn.io/v1/default.go +++ b/pkg/apis/internal.admin.acorn.io/v1/default.go @@ -5,10 +5,12 @@ import ( "fmt" "sort" + internalv1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" + "github.com/acorn-io/z" "sigs.k8s.io/controller-runtime/pkg/client" ) -func getCurrentClusterComputeClassDefault(ctx context.Context, c client.Client) (*ClusterComputeClassInstance, error) { +func getCurrentClusterComputeClassDefault(ctx context.Context, c client.Client, projectDefaultComputeClass string) (*ClusterComputeClassInstance, error) { clusterComputeClasses := ClusterComputeClassInstanceList{} if err := c.List(ctx, &clusterComputeClasses, &client.ListOptions{}); err != nil { return nil, err @@ -18,7 +20,7 @@ func getCurrentClusterComputeClassDefault(ctx context.Context, c client.Client) return clusterComputeClasses.Items[i].Name < clusterComputeClasses.Items[j].Name }) - var defaultCCC *ClusterComputeClassInstance + var defaultCCC, projectDefaultCCC *ClusterComputeClassInstance for _, clusterComputeClass := range clusterComputeClasses.Items { if clusterComputeClass.Default { if defaultCCC != nil { @@ -26,15 +28,26 @@ func getCurrentClusterComputeClassDefault(ctx context.Context, c client.Client) "cannot establish defaults because two default computeclasses exist: %v and %v", defaultCCC.Name, clusterComputeClass.Name) } - t := clusterComputeClass // Create a new variable that isn't being iterated on to get a pointer - defaultCCC = &t + + // Create a new variable that isn't being iterated on to get a pointer + if projectDefaultComputeClass != "" { + defaultCCC = z.Pointer(clusterComputeClass) + } + } + + if clusterComputeClass.Name == projectDefaultComputeClass { + projectDefaultCCC = z.Pointer(clusterComputeClass) } } + if projectDefaultCCC != nil { + return projectDefaultCCC, nil + } + return defaultCCC, nil } -func getCurrentProjectComputeClassDefault(ctx context.Context, c client.Client, namespace string) (*ProjectComputeClassInstance, error) { +func getCurrentProjectComputeClassDefault(ctx context.Context, c client.Client, projectDefaultComputeClass, namespace string) (*ProjectComputeClassInstance, error) { projectComputeClasses := ProjectComputeClassInstanceList{} if err := c.List(ctx, &projectComputeClasses, &client.ListOptions{Namespace: namespace}); err != nil { return nil, err @@ -44,7 +57,7 @@ func getCurrentProjectComputeClassDefault(ctx context.Context, c client.Client, return projectComputeClasses.Items[i].Name < projectComputeClasses.Items[j].Name }) - var defaultPCC *ProjectComputeClassInstance + var defaultPCC, projectDefaultPCC *ProjectComputeClassInstance for _, projectComputeClass := range projectComputeClasses.Items { if projectComputeClass.Default { if defaultPCC != nil { @@ -52,23 +65,40 @@ func getCurrentProjectComputeClassDefault(ctx context.Context, c client.Client, "cannot establish defaults because two default computeclasses exist: %v and %v", defaultPCC.Name, projectComputeClass.Name) } - t := projectComputeClass // Create a new variable that isn't being iterated on to get a pointer - defaultPCC = &t + + // Create a new variable that isn't being iterated on to get a pointer + if projectDefaultComputeClass != "" { + defaultPCC = z.Pointer(projectComputeClass) + } + } + + if projectComputeClass.Name == projectDefaultComputeClass { + projectDefaultPCC = z.Pointer(projectComputeClass) } } + if projectDefaultPCC != nil { + return projectDefaultPCC, nil + } + return defaultPCC, nil } func GetDefaultComputeClass(ctx context.Context, c client.Client, namespace string) (string, error) { - pcc, err := getCurrentProjectComputeClassDefault(ctx, c, namespace) + var project internalv1.ProjectInstance + if err := c.Get(ctx, client.ObjectKey{Name: namespace}, &project); err != nil { + return "", fmt.Errorf("failed to get projectinstance to determine default compute class: %w", err) + } + projectDefault := project.Status.DefaultComputeClass + + pcc, err := getCurrentProjectComputeClassDefault(ctx, c, projectDefault, namespace) if err != nil { return "", err } else if pcc != nil { return pcc.Name, nil } - ccc, err := getCurrentClusterComputeClassDefault(ctx, c) + ccc, err := getCurrentClusterComputeClassDefault(ctx, c, projectDefault) if err != nil { return "", err } else if ccc != nil { diff --git a/pkg/controller/resolvedofferings/testdata/computeclass/acornfile-override-compute-class/expected.golden b/pkg/controller/resolvedofferings/testdata/computeclass/acornfile-override-compute-class/expected.golden index 40315968a..8a9683ce7 100644 --- a/pkg/controller/resolvedofferings/testdata/computeclass/acornfile-override-compute-class/expected.golden +++ b/pkg/controller/resolvedofferings/testdata/computeclass/acornfile-override-compute-class/expected.golden @@ -49,7 +49,6 @@ status: resolvedOfferings: containers: "": - class: sample-compute-class memory: 0 left: class: sample-compute-class diff --git a/pkg/controller/resolvedofferings/testdata/computeclass/compute-class-default/expected.golden b/pkg/controller/resolvedofferings/testdata/computeclass/compute-class-default/expected.golden index 3b46bd188..cfa85853d 100644 --- a/pkg/controller/resolvedofferings/testdata/computeclass/compute-class-default/expected.golden +++ b/pkg/controller/resolvedofferings/testdata/computeclass/compute-class-default/expected.golden @@ -48,7 +48,6 @@ status: resolvedOfferings: containers: "": - class: sample-compute-class memory: 0 left: class: sample-compute-class diff --git a/pkg/controller/resolvedofferings/testdata/computeclass/user-override-compute-class/expected.golden b/pkg/controller/resolvedofferings/testdata/computeclass/user-override-compute-class/expected.golden index bcb2ab7b6..389cdb743 100644 --- a/pkg/controller/resolvedofferings/testdata/computeclass/user-override-compute-class/expected.golden +++ b/pkg/controller/resolvedofferings/testdata/computeclass/user-override-compute-class/expected.golden @@ -51,7 +51,6 @@ status: resolvedOfferings: containers: "": - class: sample-compute-class memory: 0 left: class: sample-compute-class