added poseidon with aws to k8s changes
This commit is contained in:
71
internal/environment/k8s_manager.go
Normal file
71
internal/environment/k8s_manager.go
Normal file
@ -0,0 +1,71 @@
|
||||
package environment
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/openHPI/poseidon/internal/config"
|
||||
"github.com/openHPI/poseidon/internal/runner"
|
||||
"github.com/openHPI/poseidon/pkg/dto"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
)
|
||||
|
||||
// KubernetesEnvironmentManager manages Kubernetes environments.
|
||||
type KubernetesEnvironmentManager struct {
|
||||
*AbstractManager
|
||||
clientSet *kubernetes.Clientset
|
||||
}
|
||||
|
||||
func NewKubernetesEnvironmentManager(runnerManager runner.Manager, clientset *kubernetes.Clientset) *KubernetesEnvironmentManager {
|
||||
return &KubernetesEnvironmentManager{
|
||||
AbstractManager: &AbstractManager{nil, runnerManager},
|
||||
clientSet: clientset,
|
||||
}
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironmentManager) List(fetch bool) ([]runner.ExecutionEnvironment, error) {
|
||||
list, err := k.NextHandler().List(fetch)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("kubernetes wrapped: %w", err)
|
||||
}
|
||||
return append(list, k.runnerManager.ListEnvironments()...), nil
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironmentManager) Get(id dto.EnvironmentID, fetch bool) (runner.ExecutionEnvironment, error) {
|
||||
e, ok := k.runnerManager.GetEnvironment(id)
|
||||
if ok {
|
||||
return e, nil
|
||||
} else {
|
||||
e, err := k.NextHandler().Get(id, fetch)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("kubernetes wrapped: %w", err)
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (k *KubernetesEnvironmentManager) CreateOrUpdate(
|
||||
id dto.EnvironmentID, request dto.ExecutionEnvironmentRequest, ctx context.Context) (bool, error) {
|
||||
if !isKubernetesEnvironment(request) {
|
||||
isCreated, err := k.NextHandler().CreateOrUpdate(id, request, ctx)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("kubernetes wrapped: %w", err)
|
||||
}
|
||||
return isCreated, nil
|
||||
}
|
||||
|
||||
_, ok := k.runnerManager.GetEnvironment(id)
|
||||
e := NewKubernetesEnvironment(k.runnerManager.Return, k.clientSet)
|
||||
e.SetID(id)
|
||||
e.SetImage(request.Image)
|
||||
k.runnerManager.StoreEnvironment(e)
|
||||
return !ok, nil
|
||||
}
|
||||
|
||||
func isKubernetesEnvironment(request dto.ExecutionEnvironmentRequest) bool {
|
||||
for _, image := range config.Config.Kubernetes.Images {
|
||||
if request.Image == image {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
Reference in New Issue
Block a user