added poseidon with aws to k8s changes
This commit is contained in:
139
internal/environment/k8s_env.go
Normal file
139
internal/environment/k8s_env.go
Normal file
@ -0,0 +1,139 @@
|
||||
package environment
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/openHPI/poseidon/internal/runner"
|
||||
"github.com/openHPI/poseidon/pkg/dto"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
)
|
||||
|
||||
type KubernetesEnvironment struct {
|
||||
id dto.EnvironmentID
|
||||
image string
|
||||
cpuLimit uint
|
||||
memoryLimit uint
|
||||
networkEnabled bool
|
||||
mappedPorts []uint16
|
||||
prewarmingPool uint
|
||||
onDestroyRunner runner.DestroyRunnerHandler
|
||||
clientset *kubernetes.Clientset
|
||||
}
|
||||
|
||||
func NewKubernetesEnvironment(onDestroyRunner runner.DestroyRunnerHandler, clientset *kubernetes.Clientset) *KubernetesEnvironment {
|
||||
return &KubernetesEnvironment{
|
||||
onDestroyRunner: onDestroyRunner,
|
||||
clientset: clientset,
|
||||
cpuLimit: 500, // Default CPU limit (in millicores)
|
||||
memoryLimit: 512, // Default memory limit (in MB)
|
||||
networkEnabled: false,
|
||||
prewarmingPool: 1,
|
||||
}
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) MarshalJSON() ([]byte, error) {
|
||||
res, err := json.Marshal(dto.ExecutionEnvironmentData{
|
||||
ID: int(k.ID()),
|
||||
ExecutionEnvironmentRequest: dto.ExecutionEnvironmentRequest{Image: k.Image()},
|
||||
})
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("couldn't marshal kubernetes execution environment: %w", err)
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) ID() dto.EnvironmentID {
|
||||
return k.id
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetID(id dto.EnvironmentID) {
|
||||
k.id = id
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) Image() string {
|
||||
return k.image
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetImage(image string) {
|
||||
k.image = image
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) Delete(_ runner.DestroyReason) error {
|
||||
// Implement Kubernetes-specific deletion logic here
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) Sample() (r runner.Runner, ok bool) {
|
||||
workload, err := runner.NewKubernetesPodWorkload(k, k.onDestroyRunner, k.clientset)
|
||||
if err != nil {
|
||||
return nil, false
|
||||
}
|
||||
return workload, true
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) IdleRunnerCount() uint {
|
||||
// Implement logic to count idle runners in Kubernetes
|
||||
return 0
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) PrewarmingPoolSize() uint {
|
||||
return k.prewarmingPool
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetPrewarmingPoolSize(size uint) {
|
||||
k.prewarmingPool = size
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) ApplyPrewarmingPoolSize() error {
|
||||
// Implement logic to apply prewarming pool size in Kubernetes
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) CPULimit() uint {
|
||||
return k.cpuLimit
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetCPULimit(limit uint) {
|
||||
k.cpuLimit = limit
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) MemoryLimit() uint {
|
||||
return k.memoryLimit
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetMemoryLimit(limit uint) {
|
||||
k.memoryLimit = limit
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) NetworkAccess() (enabled bool, mappedPorts []uint16) {
|
||||
return k.networkEnabled, k.mappedPorts
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetNetworkAccess(enabled bool, ports []uint16) {
|
||||
k.networkEnabled = enabled
|
||||
k.mappedPorts = ports
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) SetConfigFrom(env runner.ExecutionEnvironment) {
|
||||
if kEnv, ok := env.(*KubernetesEnvironment); ok {
|
||||
k.cpuLimit = kEnv.cpuLimit
|
||||
k.memoryLimit = kEnv.memoryLimit
|
||||
k.networkEnabled = kEnv.networkEnabled
|
||||
k.mappedPorts = kEnv.mappedPorts
|
||||
k.prewarmingPool = kEnv.prewarmingPool
|
||||
}
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) Register() error {
|
||||
// Implement Kubernetes-specific registration logic here
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) AddRunner(runner runner.Runner) {
|
||||
// Implement logic to add a runner to the Kubernetes environment
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironment) DeleteRunner(id string) (r runner.Runner, ok bool) {
|
||||
// Implement logic to delete a runner from the Kubernetes environment
|
||||
return nil, false
|
||||
}
|
Reference in New Issue
Block a user