Weisen Pan a877aed45f AI-based CFN Traffic Control and Computer Force Scheduling
Change-Id: I16cd7730c1e0732253ac52f51010f6b813295aa7
2023-11-03 00:09:19 -07:00

78 lines
2.2 KiB
Go

package test
// Author: Weisen Pan
// Date: 2023-10-24
import (
"encoding/json"
simontype "github.com/hkust-adsl/kubernetes-scheduler-simulator/knets_pkg/type"
"github.com/hkust-adsl/kubernetes-scheduler-simulator/knets_pkg/utils"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/knets_pkg/api/resource"
metav1 "k8s.io/apimachinery/knets_pkg/apis/meta/v1"
)
// FakeNodeOption represents a function that configures a fake Node.
type FakeNodeOption func(*corev1.Node)
// MakeFakeNode creates a fake Node with the provided name, CPU, memory, and options.
func MakeFakeNode(name string, cpu, memory string, opts ...FakeNodeOption) *corev1.Node {
res := corev1.ResourceList{}
if cpu != "" {
res[corev1.ResourceCPU] = resource.MustParse(cpu)
}
if memory != "" {
res[corev1.ResourceMemory] = resource.MustParse(memory)
}
res["pods"] = *resource.NewQuantity(110, resource.DecimalSI)
node := &corev1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: name,
},
Status: corev1.NodeStatus{
Capacity: res,
Allocatable: res,
},
}
// Apply the specified options to the node.
for _, opt := range opts {
opt(node)
}
return node
}
// WithNodeAnnotations is a FakeNodeOption that sets annotations for the fake Node.
func WithNodeAnnotations(annotations map[string]string) FakeNodeOption {
return func(node *corev1.Node) {
node.ObjectMeta.Annotations = annotations
}
}
// WithNodeLabels is a FakeNodeOption that sets labels for the fake Node.
func WithNodeLabels(labels map[string]string) FakeNodeOption {
return func(node *corev1.Node) {
node.ObjectMeta.Labels = labels
}
}
// WithNodeTaints is a FakeNodeOption that sets taints for the fake Node.
func WithNodeTaints(taints []corev1.Taint) FakeNodeOption {
return func(node *corev1.Node) {
node.Spec.Taints = taints
}
}
// WithNodeLocalStorage is a FakeNodeOption that sets local storage information for the fake Node.
func WithNodeLocalStorage(storage utils.NodeStorage) FakeNodeOption {
return func(node *corev1.Node) {
// Marshal the storage to JSON and set it as an annotation.
b, _ := json.Marshal(storage)
metav1.SetMetaDataAnnotation(&node.ObjectMeta, simontype.AnnoNodeLocalStorage, string(b))
}
}