From eb893d435fd992c3dc9528bc681a017e4ca384bd 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 | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 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..04eaf9030 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,24 @@ 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 + 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 +55,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 +63,38 @@ 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 + 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 {