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

Commit

Permalink
enhance: factor project default cc into default cc selection
Browse files Browse the repository at this point in the history
Signed-off-by: Nick Hale <[email protected]>
  • Loading branch information
njhale committed Feb 7, 2024
1 parent d8f39d1 commit 58af11f
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 13 deletions.
50 changes: 40 additions & 10 deletions pkg/apis/internal.admin.acorn.io/v1/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -18,23 +20,34 @@ 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 {
return nil, fmt.Errorf(
"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
Expand All @@ -44,31 +57,48 @@ 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 {
return nil, fmt.Errorf(
"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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ 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,7 +48,6 @@ 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,7 +51,6 @@ status:
resolvedOfferings:
containers:
"":
class: sample-compute-class
memory: 0
left:
class: sample-compute-class
Expand Down

0 comments on commit 58af11f

Please sign in to comment.