From bf184debe34621a621ebcb6950b19a4989b81fd5 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 10 Sep 2024 09:49:56 +0200 Subject: [PATCH 001/106] Modify the priority value of the replica services --- pkg/resourcemanager/delegate.go | 53 +++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index dfa5a225..a3a095af 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -307,15 +307,16 @@ func updateServiceToken(replica types.Replica, cluster types.Cluster) (string, e } func getClusterStatus(service *types.Service) { - fmt.Println("Process to getClusterStatus function") - for _, replica := range service.Replicas { + fmt.Println("Process to getClusterStatus function.") + for id, replica := range service.Replicas { // Manage if replica.Type is "oscar" if strings.ToLower(replica.Type) == oscarReplicaType { // Check ClusterID is defined in 'Clusters' cluster, ok := service.Clusters[replica.ClusterID] if !ok { if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode } fmt.Printf("Error checking to ClusterID \"%s\": Cluster not defined\n", replica.ClusterID) continue @@ -323,7 +324,10 @@ func getClusterStatus(service *types.Service) { // Parse the cluster's endpoint URL and add the service's path getStatusURL, err := url.Parse(cluster.Endpoint) if err != nil { - replica.Priority = noDelegateCode + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } fmt.Printf("Error parsing the cluster's endpoint URL to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", replica.ClusterID, cluster.Endpoint, err) continue } @@ -333,7 +337,8 @@ func getClusterStatus(service *types.Service) { req, err := http.NewRequest(http.MethodGet, getStatusURL.String(), nil) if err != nil { if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode } fmt.Printf("Error making request to ClusterID \"%s\": unable to make request: %v\n", replica.ClusterID, err) continue @@ -355,7 +360,8 @@ func getClusterStatus(service *types.Service) { res, err := client.Do(req) if err != nil { if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode } fmt.Printf("Error getting cluster status to ClusterID \"%s\": unable to send request: %v\n", replica.ClusterID, err) continue @@ -370,7 +376,8 @@ func getClusterStatus(service *types.Service) { err = json.NewDecoder(res.Body).Decode(&clusterStatus) if err != nil { if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode } fmt.Println("Error decoding the JSON of the response:", err) continue @@ -380,48 +387,56 @@ func getClusterStatus(service *types.Service) { // CPU required to deploy the service serviceCPU, err := strconv.ParseFloat(service.CPU, 64) if err != nil { - replica.Priority = noDelegateCode + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } fmt.Println("Error to converter CPU of service to int: ", err) continue } - fmt.Println("serviceCPU :", serviceCPU) + fmt.Println("serviceCPU: ", serviceCPU) maxNodeCPU := float64(clusterStatus.CPUMaxFree) - fmt.Println("maxNodeCPU", maxNodeCPU) + fmt.Println("maxNodeCPU: ", maxNodeCPU) //Calculate CPU difference to determine whether to delegate a replica to the cluster dist := maxNodeCPU - (1000 * serviceCPU) - fmt.Println("CPU difference ", dist) + fmt.Println("CPU difference: ", dist) //The priority of delegating the service is set based on the free CPU of the cluster as long as it has free CPU on a node to delegate the service. if dist >= 0 { fmt.Println("Resources available in ClusterID", replica.ClusterID) if service.Delegation == "random" { randPriority := rand.Intn(noDelegateCode) - replica.Priority = uint(randPriority) - fmt.Println("Priority ", replica.Priority, " with ", service.Delegation, " delegation") + service.Replicas[id].Priority = uint(randPriority) + //replica.Priority = uint(randPriority) + fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") } else if service.Delegation == "load-based" { //Map the totalClusterCPU range to a smaller range (input range 0 to 32 cpu to output range 100 to 0 priority) totalClusterCPU := clusterStatus.CPUFreeTotal mappedCPUPriority := mapToRange(totalClusterCPU, 0, 32000, 100, 0) - replica.Priority = uint(mappedCPUPriority) - fmt.Println("Priority ", replica.Priority, " with ", service.Delegation, " delegation") + service.Replicas[id].Priority = uint(mappedCPUPriority) + //replica.Priority = uint(mappedCPUPriority) + fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") } else if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode fmt.Println("Error when declaring the type of delegation in ClusterID ", replica.ClusterID) continue } } else { fmt.Println("No CPU capacity to delegate job in ClusterID ", replica.ClusterID) if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode } continue } fmt.Println("Status Cluster ", clusterStatus) - fmt.Println("Priority ", replica.Priority) + fmt.Println("Priority: ", service.Replicas[id].Priority) } else { if service.Delegation != "static" { - replica.Priority = noDelegateCode + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode } fmt.Printf("Error to get of cluster status to ClusterID\"%s\"\n", replica.ClusterID) } From da5cbd66088b88064bdbfbf01807606a95b6ff65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Fri, 13 Sep 2024 13:28:22 +0200 Subject: [PATCH 002/106] Update script to prevent overwrite The output file name should depend on the input file name to prevent overwriting of the results. --- examples/plants-classification-tensorflow/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/plants-classification-tensorflow/script.sh b/examples/plants-classification-tensorflow/script.sh index ab76ecc8..26835bb6 100644 --- a/examples/plants-classification-tensorflow/script.sh +++ b/examples/plants-classification-tensorflow/script.sh @@ -1,6 +1,6 @@ #!/bin/bash -IMAGE_NAME=`basename "$INPUT_FILE_PATH"` +IMAGE_NAME=`basename "$INPUT_FILE_PATH" | cut -d. -f1` OUTPUT_FILE="$TMP_OUTPUT_DIR/output.json" deepaas-cli predict --files "$INPUT_FILE_PATH" 2>&1 | grep -Po '{.*}' > "$OUTPUT_FILE" From 8ad6914b556fe21c9a57095ee23710b2188069e0 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Mon, 23 Sep 2024 11:57:40 +0200 Subject: [PATCH 003/106] Event log to delegate --- pkg/resourcemanager/delegate.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index a3a095af..ef0901da 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -79,9 +79,11 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error sort.Stable(service.Replicas) fmt.Println("Replicas Stable: ", service.Replicas) } - + fmt.Println("Event : ", event) delegatedEvent := WrapEvent(service.ClusterID, event) + fmt.Println("delegateEvent : ", delegatedEvent) eventJSON, err := json.Marshal(delegatedEvent) + fmt.Println("eventJSON : ", eventJSON) if err != nil { return fmt.Errorf("error marshalling delegated event: %v", err) } From c4236b48c0af3f11c852777eb602129bb307dd36 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 24 Sep 2024 10:13:38 +0200 Subject: [PATCH 004/106] Tests for reading TLS certificates --- pkg/resourcemanager/delegate.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index ef0901da..7007e74b 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -80,10 +80,12 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error fmt.Println("Replicas Stable: ", service.Replicas) } fmt.Println("Event : ", event) + delegatedEvent := WrapEvent(service.ClusterID, event) fmt.Println("delegateEvent : ", delegatedEvent) + eventJSON, err := json.Marshal(delegatedEvent) - fmt.Println("eventJSON : ", eventJSON) + if err != nil { return fmt.Errorf("error marshalling delegated event: %v", err) } @@ -131,10 +133,12 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) // Make HTTP client + fmt.Println("SSLVerify :", cluster.SSLVerify) var transport http.RoundTripper = &http.Transport{ // Enable/disable SSL verification TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, } + fmt.Println("Transport : ", transport) client := &http.Client{ Transport: transport, Timeout: time.Second * 20, From 91ebcd2b9f7abceae5217560094d1b20fd1f6e5a Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 24 Sep 2024 10:16:16 +0200 Subject: [PATCH 005/106] Tests for reading TLS certificates --- pkg/resourcemanager/delegate.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 7007e74b..349fb585 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -82,7 +82,6 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error fmt.Println("Event : ", event) delegatedEvent := WrapEvent(service.ClusterID, event) - fmt.Println("delegateEvent : ", delegatedEvent) eventJSON, err := json.Marshal(delegatedEvent) From 7d333f33e7d4525988906c9922e838ae8b5f6e01 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 24 Sep 2024 10:45:47 +0200 Subject: [PATCH 006/106] Tests for reading TLS certificates --- pkg/resourcemanager/delegate.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 349fb585..95c3cdaf 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -132,12 +132,12 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) // Make HTTP client - fmt.Println("SSLVerify :", cluster.SSLVerify) + var transport http.RoundTripper = &http.Transport{ // Enable/disable SSL verification TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, } - fmt.Println("Transport : ", transport) + client := &http.Client{ Transport: transport, Timeout: time.Second * 20, @@ -272,6 +272,7 @@ func updateServiceToken(replica types.Replica, cluster types.Cluster) (string, e req.SetBasicAuth(cluster.AuthUser, cluster.AuthPassword) // Make HTTP client + var transport http.RoundTripper = &http.Transport{ // Enable/disable SSL verification TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, @@ -352,10 +353,12 @@ func getClusterStatus(service *types.Service) { req.SetBasicAuth(cluster.AuthUser, cluster.AuthPassword) // Make HTTP client + fmt.Println("SSLVerify :", cluster.SSLVerify) var transport http.RoundTripper = &http.Transport{ // Enable/disable SSL verification TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, } + fmt.Println("Transport : ", transport) client := &http.Client{ Transport: transport, Timeout: time.Second * 20, @@ -363,6 +366,7 @@ func getClusterStatus(service *types.Service) { // Send the request res, err := client.Do(req) + fmt.Println("StatusCode : ", res.StatusCode) if err != nil { if service.Delegation != "static" { service.Replicas[id].Priority = noDelegateCode From 6dc85bb2ae7601ebba013f58e2a181a0b4757230 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Wed, 25 Sep 2024 12:30:59 +0200 Subject: [PATCH 007/106] Block access using mutex function --- pkg/resourcemanager/delegate.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 95c3cdaf..ecf950e1 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -29,6 +29,7 @@ import ( "sort" "strconv" "strings" + "sync" "time" "github.com/grycap/oscar/v3/pkg/types" @@ -43,6 +44,8 @@ const ( // tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] var tokenCache = map[string]map[string]string{} +var mutex sync.Mutex + // DelegatedEvent wraps the original input event by adding the storage provider ID type DelegatedEvent struct { StorageProviderID string `json:"storage_provider"` @@ -70,6 +73,11 @@ type NodeInfo struct { // DelegateJob sends the event to a service's replica func DelegateJob(service *types.Service, event string, logger *log.Logger) error { + + //Block access before executing the function + mutex.Lock() + defer mutex.Unlock() + //Determine priority level of each replica to delegate getClusterStatus(service) fmt.Println("Replicas: ", service.Replicas) @@ -79,8 +87,8 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error sort.Stable(service.Replicas) fmt.Println("Replicas Stable: ", service.Replicas) } - fmt.Println("Event : ", event) + fmt.Println("Event : ", event) delegatedEvent := WrapEvent(service.ClusterID, event) eventJSON, err := json.Marshal(delegatedEvent) From 3b814ac7a06e7fd9f8a835e87a99668f3db776ff Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Mon, 7 Oct 2024 13:15:43 +0200 Subject: [PATCH 008/106] Add tests for expose --- pkg/types/expose.go | 21 ++++---- pkg/types/expose_test.go | 106 +++++++++++++++++++++++++++++++++++++++ pkg/types/service.go | 22 ++++---- 3 files changed, 127 insertions(+), 22 deletions(-) create mode 100644 pkg/types/expose_test.go diff --git a/pkg/types/expose.go b/pkg/types/expose.go index 0be38895..cb7be89c 100644 --- a/pkg/types/expose.go +++ b/pkg/types/expose.go @@ -246,7 +246,7 @@ func getHortizontalAutoScaleSpec(service Service, cfg *Config) *autos.Horizontal func getPodTemplateSpec(service Service, cfg *Config) v1.PodTemplateSpec { podSpec, _ := service.ToPodSpec(cfg) - for i, _ := range podSpec.Containers { + for i := range podSpec.Containers { podSpec.Containers[i].Ports = []v1.ContainerPort{ { Name: podPortName, @@ -414,7 +414,7 @@ func deleteService(name string, kubeClientset kubernetes.Interface, cfg *Config) func createIngress(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { // Create Secret - ingress := getIngressSpec(service, kubeClientset, cfg) + ingress := getIngressSpec(service, cfg) _, err := kubeClientset.NetworkingV1().Ingresses(cfg.ServicesNamespace).Create(context.TODO(), ingress, metav1.CreateOptions{}) if err != nil { return err @@ -432,7 +432,7 @@ func updateIngress(service Service, kubeClientset kubernetes.Interface, cfg *Con //if exist continue and need -> Update //if exist and not need -> delete //if not exist create - kube_ingress := getIngressSpec(service, kubeClientset, cfg) + kube_ingress := getIngressSpec(service, cfg) _, err := kubeClientset.NetworkingV1().Ingresses(cfg.ServicesNamespace).Update(context.TODO(), kube_ingress, metav1.UpdateOptions{}) if err != nil { return err @@ -455,7 +455,7 @@ func updateIngress(service Service, kubeClientset kubernetes.Interface, cfg *Con } // Return a kubernetes ingress component, ready to deploy or update -func getIngressSpec(service Service, kubeClientset kubernetes.Interface, cfg *Config) *net.Ingress { +func getIngressSpec(service Service, cfg *Config) *net.Ingress { name_ingress := getIngressName(service.Name) pathofapi := getAPIPath(service.Name) name_service := getServiceName(service.Name) @@ -554,7 +554,7 @@ func deleteIngress(name string, kubeClientset kubernetes.Interface, cfg *Config) // Secret func createSecret(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { - secret := getSecretSpec(service, kubeClientset, cfg) + secret := getSecretSpec(service, cfg) _, err := kubeClientset.CoreV1().Secrets(cfg.ServicesNamespace).Create(context.TODO(), secret, metav1.CreateOptions{}) if err != nil { return err @@ -563,7 +563,7 @@ func createSecret(service Service, kubeClientset kubernetes.Interface, cfg *Conf } func updateSecret(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { - secret := getSecretSpec(service, kubeClientset, cfg) + secret := getSecretSpec(service, cfg) _, err := kubeClientset.CoreV1().Secrets(cfg.ServicesNamespace).Update(context.TODO(), secret, metav1.UpdateOptions{}) if err != nil { return err @@ -579,12 +579,12 @@ func deleteSecret(name string, kubeClientset kubernetes.Interface, cfg *Config) } return nil } -func getSecretSpec(service Service, kubeClientset kubernetes.Interface, cfg *Config) *v1.Secret { +func getSecretSpec(service Service, cfg *Config) *v1.Secret { //setPassword hash := make(htpasswd.HashedPasswords) err := hash.SetPassword(service.Name, service.Token, htpasswd.HashAPR1) if err != nil { - ExposeLogger.Printf(err.Error()) + ExposeLogger.Print(err.Error()) } //Create Secret inmutable := false @@ -620,10 +620,7 @@ func existsSecret(serviceName string, kubeClientset kubernetes.Interface, cfg *C func existsIngress(serviceName string, namespace string, kubeClientset kubernetes.Interface) bool { _, err := kubeClientset.NetworkingV1().Ingresses(namespace).Get(context.TODO(), getIngressName(serviceName), metav1.GetOptions{}) - if err == nil { - return true - } - return false + return err == nil } /// These are auxiliary functions diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go new file mode 100644 index 00000000..3121a2a2 --- /dev/null +++ b/pkg/types/expose_test.go @@ -0,0 +1,106 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import ( + "testing" + + testclient "k8s.io/client-go/kubernetes/fake" +) + +func TestCreateExpose(t *testing.T) { + + kubeClientset := testclient.NewSimpleClientset() + + service := Service{ + Name: "test-service", + Expose: Expose{ + MinScale: 1, + MaxScale: 3, + CpuThreshold: 80, + }, + } + cfg := &Config{Namespace: "namespace"} + + err := CreateExpose(service, kubeClientset, cfg) + + if err != nil { + t.Errorf("Error creating expose: %v", err) + } + + actions := kubeClientset.Actions() + if len(actions) != 4 { + t.Errorf("Expected 4 actions but got %d", len(actions)) + } + + if actions[0].GetVerb() != "create" || actions[0].GetResource().Resource != "deployments" { + t.Errorf("Expected create deployment action but got %v", actions[0]) + } + + if actions[1].GetVerb() != "create" || actions[1].GetResource().Resource != "horizontalpodautoscalers" { + t.Errorf("Expected create horizontalpodautoscalers action but got %v", actions[1]) + } + + if actions[2].GetVerb() != "create" || actions[2].GetResource().Resource != "services" { + t.Errorf("Expected create service action but got %v", actions[2]) + } + + if actions[3].GetVerb() != "create" || actions[3].GetResource().Resource != "ingresses" { + t.Errorf("Expected create ingress action but got %v", actions[3]) + } +} + +func TestServiceSpec(t *testing.T) { + + service := Service{ + Name: "test-service", + Expose: Expose{ + MinScale: 1, + MaxScale: 3, + CpuThreshold: 40, + APIPort: 8080, + }, + } + cfg := &Config{Namespace: "namespace"} + res := getServiceSpec(service, cfg) + if res.Spec.Ports[0].TargetPort.IntVal != 8080 { + t.Errorf("Expected port 8080 but got %d", res.Spec.Ports[0].Port) + } +} + +func TestHortizontalAutoScaleSpec(t *testing.T) { + + service := Service{ + Name: "test-service", + Expose: Expose{ + MinScale: 1, + MaxScale: 3, + CpuThreshold: 40, + }, + } + cfg := &Config{Namespace: "namespace"} + res := getHortizontalAutoScaleSpec(service, cfg) + if *res.Spec.MinReplicas != 1 { + t.Errorf("Expected min replicas 1 but got %d", res.Spec.MinReplicas) + } + if res.Spec.MaxReplicas != 3 { + t.Errorf("Expected max replicas 3 but got %d", res.Spec.MaxReplicas) + } + if *res.Spec.TargetCPUUtilizationPercentage != 40 { + t.Errorf("Expected target cpu 40 but got %d", res.Spec.TargetCPUUtilizationPercentage) + } +} diff --git a/pkg/types/service.go b/pkg/types/service.go index 0fc8c157..c7d071f8 100644 --- a/pkg/types/service.go +++ b/pkg/types/service.go @@ -108,6 +108,17 @@ const ( // YAMLMarshal package-level yaml marshal function var YAMLMarshal = yaml.Marshal +type Expose struct { + MinScale int32 `json:"min_scale" default:"1"` + MaxScale int32 `json:"max_scale" default:"10"` + APIPort int `json:"api_port,omitempty" ` + CpuThreshold int32 `json:"cpu_threshold" default:"80" ` + RewriteTarget bool `json:"rewrite_target" default:"false" ` + NodePort int32 `json:"nodePort" default:"0" ` + DefaultCommand bool `json:"default_command" ` + SetAuth bool `json:"set_auth" ` +} + // Service represents an OSCAR service following the SCAR Function Definition Language type Service struct { // Name the name of the service @@ -206,16 +217,7 @@ type Service struct { // Optional ImagePullSecrets []string `json:"image_pull_secrets,omitempty"` - Expose struct { - MinScale int32 `json:"min_scale" default:"1"` - MaxScale int32 `json:"max_scale" default:"10"` - APIPort int `json:"api_port,omitempty" ` - CpuThreshold int32 `json:"cpu_threshold" default:"80" ` - RewriteTarget bool `json:"rewrite_target" default:"false" ` - NodePort int32 `json:"nodePort" default:"0" ` - DefaultCommand bool `json:"default_command" ` - SetAuth bool `json:"set_auth" ` - } `json:"expose"` + Expose Expose `json:"expose"` // The user-defined environment variables assigned to the service // Optional From 05a1a379b4fb1d8af4be723d7a33c87244f11301 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Mon, 7 Oct 2024 13:49:26 +0200 Subject: [PATCH 009/106] Add tests for expose --- pkg/types/expose_test.go | 65 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go index 3121a2a2..12db9fdb 100644 --- a/pkg/types/expose_test.go +++ b/pkg/types/expose_test.go @@ -19,6 +19,11 @@ package types import ( "testing" + v1 "k8s.io/api/apps/v1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" testclient "k8s.io/client-go/kubernetes/fake" ) @@ -34,7 +39,7 @@ func TestCreateExpose(t *testing.T) { CpuThreshold: 80, }, } - cfg := &Config{Namespace: "namespace"} + cfg := &Config{ServicesNamespace: "namespace"} err := CreateExpose(service, kubeClientset, cfg) @@ -64,6 +69,64 @@ func TestCreateExpose(t *testing.T) { } } +func TestDeleteExpose(t *testing.T) { + + K8sObjects := []runtime.Object{ + &autoscalingv1.HorizontalPodAutoscaler{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-hpa", + Namespace: "namespace", + }, + }, + &v1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-dlp", + Namespace: "namespace", + }, + }, + &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-svc", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + err := DeleteExpose("service", kubeClientset, cfg) + + if err != nil { + t.Errorf("Error creating expose: %v", err) + } + + actions := kubeClientset.Actions() + if len(actions) != 5 { + t.Errorf("Expected 2 actions but got %d", len(actions)) + } + + if actions[0].GetVerb() != "delete" || actions[0].GetResource().Resource != "horizontalpodautoscalers" { + t.Errorf("Expected delete horizontalpodautoscalers action but got %v", actions[0]) + } + + if actions[1].GetVerb() != "delete" || actions[1].GetResource().Resource != "deployments" { + t.Errorf("Expected delete deployment action but got %v", actions[1]) + } + + if actions[2].GetVerb() != "delete" || actions[2].GetResource().Resource != "services" { + t.Errorf("Expected delete services action but got %v", actions[2]) + } + + if actions[3].GetVerb() != "get" || actions[3].GetResource().Resource != "ingresses" { + t.Errorf("Expected get ingresses action but got %v", actions[3]) + } + + if actions[4].GetVerb() != "delete-collection" || actions[4].GetResource().Resource != "pods" { + t.Errorf("Expected delete-collection pods action but got %v", actions[4]) + } +} + func TestServiceSpec(t *testing.T) { service := Service{ From 654715cb7eaa9d07de73fa3c3dc3cf4602ffa770 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Mon, 7 Oct 2024 14:02:05 +0200 Subject: [PATCH 010/106] Add tests for expose --- pkg/types/expose_test.go | 60 +++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go index 12db9fdb..62f3a250 100644 --- a/pkg/types/expose_test.go +++ b/pkg/types/expose_test.go @@ -27,6 +27,12 @@ import ( testclient "k8s.io/client-go/kubernetes/fake" ) +type Action struct { + Verb string + Resource string + ObjectName string +} + func TestCreateExpose(t *testing.T) { kubeClientset := testclient.NewSimpleClientset() @@ -48,24 +54,21 @@ func TestCreateExpose(t *testing.T) { } actions := kubeClientset.Actions() - if len(actions) != 4 { - t.Errorf("Expected 4 actions but got %d", len(actions)) - } - - if actions[0].GetVerb() != "create" || actions[0].GetResource().Resource != "deployments" { - t.Errorf("Expected create deployment action but got %v", actions[0]) - } - - if actions[1].GetVerb() != "create" || actions[1].GetResource().Resource != "horizontalpodautoscalers" { - t.Errorf("Expected create horizontalpodautoscalers action but got %v", actions[1]) + expected_actions := []Action{ + {Verb: "create", Resource: "deployments"}, + {Verb: "create", Resource: "horizontalpodautoscalers"}, + {Verb: "create", Resource: "services"}, + {Verb: "create", Resource: "ingresses"}, } - if actions[2].GetVerb() != "create" || actions[2].GetResource().Resource != "services" { - t.Errorf("Expected create service action but got %v", actions[2]) + if len(actions) != len(expected_actions) { + t.Errorf("Expected %d actions but got %d", (len(expected_actions)), len(actions)) } - if actions[3].GetVerb() != "create" || actions[3].GetResource().Resource != "ingresses" { - t.Errorf("Expected create ingress action but got %v", actions[3]) + for i, action := range actions { + if action.GetVerb() != expected_actions[i].Verb || action.GetResource().Resource != expected_actions[i].Resource { + t.Errorf("Expected %v action but got %v", expected_actions[i], action) + } } } @@ -102,28 +105,23 @@ func TestDeleteExpose(t *testing.T) { } actions := kubeClientset.Actions() - if len(actions) != 5 { - t.Errorf("Expected 2 actions but got %d", len(actions)) - } - - if actions[0].GetVerb() != "delete" || actions[0].GetResource().Resource != "horizontalpodautoscalers" { - t.Errorf("Expected delete horizontalpodautoscalers action but got %v", actions[0]) - } - - if actions[1].GetVerb() != "delete" || actions[1].GetResource().Resource != "deployments" { - t.Errorf("Expected delete deployment action but got %v", actions[1]) - } - if actions[2].GetVerb() != "delete" || actions[2].GetResource().Resource != "services" { - t.Errorf("Expected delete services action but got %v", actions[2]) + expected_actions := []Action{ + {Verb: "delete", Resource: "horizontalpodautoscalers", ObjectName: "service-hpa"}, + {Verb: "delete", Resource: "deployments", ObjectName: "service-dlp"}, + {Verb: "delete", Resource: "services", ObjectName: "service-svc"}, + {Verb: "get", Resource: "ingresses", ObjectName: "service-ing"}, + {Verb: "delete-collection", Resource: "pods", ObjectName: "service-pod"}, } - if actions[3].GetVerb() != "get" || actions[3].GetResource().Resource != "ingresses" { - t.Errorf("Expected get ingresses action but got %v", actions[3]) + if len(actions) != len(expected_actions) { + t.Errorf("Expected %d actions but got %d", (len(expected_actions)), len(actions)) } - if actions[4].GetVerb() != "delete-collection" || actions[4].GetResource().Resource != "pods" { - t.Errorf("Expected delete-collection pods action but got %v", actions[4]) + for i, action := range actions { + if action.GetVerb() != expected_actions[i].Verb || action.GetResource().Resource != expected_actions[i].Resource { + t.Errorf("Expected %v action but got %v", expected_actions[i], action) + } } } From 09d3a4f90343368ef2a22dffa59af0d9ceb1431d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Mon, 7 Oct 2024 19:10:37 +0200 Subject: [PATCH 011/106] Included Deployment support for macOS --- deploy/kind-deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/kind-deploy.sh b/deploy/kind-deploy.sh index 8c6811c0..4fc5dadd 100755 --- a/deploy/kind-deploy.sh +++ b/deploy/kind-deploy.sh @@ -49,7 +49,7 @@ checkDocker(){ else echo -e "$GREEN$CHECK$END_COLOR Docker installation found" - rep=$(curl -s --unix-socket /var/run/docker.sock http://ping > /dev/null) + rep=$(docker info) status=$? if [ "$status" == "7" ]; then From 363256558c5f0c2ff3ab9fd20c91f5012d19ce2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Mon, 7 Oct 2024 19:11:54 +0200 Subject: [PATCH 012/106] Revert "Included Deployment support for macOS" This reverts commit 09d3a4f90343368ef2a22dffa59af0d9ceb1431d. --- deploy/kind-deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/kind-deploy.sh b/deploy/kind-deploy.sh index 4fc5dadd..8c6811c0 100755 --- a/deploy/kind-deploy.sh +++ b/deploy/kind-deploy.sh @@ -49,7 +49,7 @@ checkDocker(){ else echo -e "$GREEN$CHECK$END_COLOR Docker installation found" - rep=$(docker info) + rep=$(curl -s --unix-socket /var/run/docker.sock http://ping > /dev/null) status=$? if [ "$status" == "7" ]; then From 8e85614ff580a70637509df51909d25341fd8e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Mon, 7 Oct 2024 19:45:30 +0200 Subject: [PATCH 013/106] Updated Swagger documentation to match bearer token usage in OSCAR API --- docs/api.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/api.yaml b/docs/api.yaml index 90d5be14..be36ec1a 100644 --- a/docs/api.yaml +++ b/docs/api.yaml @@ -33,6 +33,7 @@ paths: description: List all created services security: - basicAuth: [] + - token: [] tags: - services post: @@ -50,6 +51,7 @@ paths: description: Create a service security: - basicAuth: [] + - token: [] requestBody: content: application/json: @@ -74,6 +76,7 @@ paths: description: Update a service security: - basicAuth: [] + - token: [] requestBody: content: application/json: @@ -108,6 +111,7 @@ paths: operationId: ReadService security: - basicAuth: [] + - token: [] description: Read a service delete: summary: Delete service @@ -124,6 +128,7 @@ paths: description: Delete a service security: - basicAuth: [] + - token: [] tags: - services '/system/logs/{serviceName}': @@ -157,6 +162,7 @@ paths: operationId: ListJobs security: - basicAuth: [] + - token: [] description: List all jobs with their status delete: summary: Delete jobs @@ -173,6 +179,7 @@ paths: description: Delete all jobs from a service. security: - basicAuth: [] + - token: [] parameters: - schema: type: boolean @@ -214,6 +221,7 @@ paths: description: Get the logs from a job security: - basicAuth: [] + - token: [] parameters: - schema: type: boolean @@ -234,6 +242,7 @@ paths: description: Delete a job security: - basicAuth: [] + - token: [] tags: - logs /system/info: @@ -256,6 +265,7 @@ paths: description: Get system info security: - basicAuth: [] + - token: [] /health: get: summary: Health @@ -316,6 +326,7 @@ paths: description: Get system configuration security: - basicAuth: [] + - token: [] '/run/{serviceName}': parameters: - schema: @@ -607,4 +618,6 @@ servers: - url: 'https://localhost' description: 'Local testing' - url: 'https://inference.cloud.ai4eosc.eu' - description: 'AI4EOSC OSCAR cluster' \ No newline at end of file + description: 'AI4EOSC OSCAR cluster' + - url: 'https://inference-walton.cloud.imagine-ai.eu' + description: 'iMagine OSCAR cluster' \ No newline at end of file From 96b7f8d87e6d5b810e5fe934de83a3878769c533 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 8 Oct 2024 12:31:56 +0200 Subject: [PATCH 014/106] Improve tests --- pkg/types/expose.go | 2 +- pkg/types/expose_test.go | 103 ++++++++++++++++++++++++++++++--------- 2 files changed, 82 insertions(+), 23 deletions(-) diff --git a/pkg/types/expose.go b/pkg/types/expose.go index cb7be89c..6ce2499c 100644 --- a/pkg/types/expose.go +++ b/pkg/types/expose.go @@ -153,7 +153,7 @@ func UpdateExpose(service Service, kubeClientset kubernetes.Interface, cfg *Conf // TODO check and refactor // Main function that list all the kubernetes components // This function is not used, in the future could be usefull -func ListExpose(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { +func ListExpose(kubeClientset kubernetes.Interface, cfg *Config) error { deploy, hpa, err := listDeployments(kubeClientset, cfg) services, err2 := listServices(kubeClientset, cfg) diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go index 62f3a250..d8d1614a 100644 --- a/pkg/types/expose_test.go +++ b/pkg/types/expose_test.go @@ -25,12 +25,25 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" testclient "k8s.io/client-go/kubernetes/fake" + k8stesting "k8s.io/client-go/testing" ) type Action struct { - Verb string - Resource string - ObjectName string + Verb string + Resource string +} + +func CompareActions(actions []k8stesting.Action, expected_actions []Action) bool { + if len(actions) != len(expected_actions) { + return false + } + + for i, action := range actions { + if action.GetVerb() != expected_actions[i].Verb || action.GetResource().Resource != expected_actions[i].Resource { + return false + } + } + return true } func TestCreateExpose(t *testing.T) { @@ -61,14 +74,8 @@ func TestCreateExpose(t *testing.T) { {Verb: "create", Resource: "ingresses"}, } - if len(actions) != len(expected_actions) { - t.Errorf("Expected %d actions but got %d", (len(expected_actions)), len(actions)) - } - - for i, action := range actions { - if action.GetVerb() != expected_actions[i].Verb || action.GetResource().Resource != expected_actions[i].Resource { - t.Errorf("Expected %v action but got %v", expected_actions[i], action) - } + if CompareActions(actions, expected_actions) == false { + t.Errorf("Expected %v actions but got %v", expected_actions, actions) } } @@ -107,21 +114,73 @@ func TestDeleteExpose(t *testing.T) { actions := kubeClientset.Actions() expected_actions := []Action{ - {Verb: "delete", Resource: "horizontalpodautoscalers", ObjectName: "service-hpa"}, - {Verb: "delete", Resource: "deployments", ObjectName: "service-dlp"}, - {Verb: "delete", Resource: "services", ObjectName: "service-svc"}, - {Verb: "get", Resource: "ingresses", ObjectName: "service-ing"}, - {Verb: "delete-collection", Resource: "pods", ObjectName: "service-pod"}, + {Verb: "delete", Resource: "horizontalpodautoscalers"}, + {Verb: "delete", Resource: "deployments"}, + {Verb: "delete", Resource: "services"}, + {Verb: "get", Resource: "ingresses"}, + {Verb: "delete-collection", Resource: "pods"}, } - if len(actions) != len(expected_actions) { - t.Errorf("Expected %d actions but got %d", (len(expected_actions)), len(actions)) + if CompareActions(actions, expected_actions) == false { + t.Errorf("Expected %v actions but got %v", expected_actions, actions) } +} - for i, action := range actions { - if action.GetVerb() != expected_actions[i].Verb || action.GetResource().Resource != expected_actions[i].Resource { - t.Errorf("Expected %v action but got %v", expected_actions[i], action) - } +func TestUpdateExpose(t *testing.T) { + + K8sObjects := []runtime.Object{ + &autoscalingv1.HorizontalPodAutoscaler{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-hpa", + Namespace: "namespace", + }, + }, + &v1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-dlp", + Namespace: "namespace", + }, + }, + &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-svc", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + service := Service{ + Name: "service", + Expose: Expose{ + MinScale: 1, + MaxScale: 3, + CpuThreshold: 80, + }, + } + + err := UpdateExpose(service, kubeClientset, cfg) + + if err != nil { + t.Errorf("Error creating expose: %v", err) + } + + actions := kubeClientset.Actions() + + expected_actions := []Action{ + {Verb: "get", Resource: "deployments"}, + {Verb: "update", Resource: "deployments"}, + {Verb: "get", Resource: "horizontalpodautoscalers"}, + {Verb: "update", Resource: "horizontalpodautoscalers"}, + {Verb: "update", Resource: "services"}, + {Verb: "get", Resource: "ingresses"}, + {Verb: "create", Resource: "ingresses"}, + } + + if CompareActions(actions, expected_actions) == false { + t.Errorf("Expected %v actions but got %v", expected_actions, actions) } } From 10f4b52f7ad4ffd0f58df1614267c088f0a29757 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 8 Oct 2024 12:33:39 +0200 Subject: [PATCH 015/106] Improve tests --- pkg/types/expose_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go index d8d1614a..6097ac40 100644 --- a/pkg/types/expose_test.go +++ b/pkg/types/expose_test.go @@ -19,7 +19,7 @@ package types import ( "testing" - v1 "k8s.io/api/apps/v1" + appsv1 "k8s.io/api/apps/v1" autoscalingv1 "k8s.io/api/autoscaling/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -88,7 +88,7 @@ func TestDeleteExpose(t *testing.T) { Namespace: "namespace", }, }, - &v1.Deployment{ + &appsv1.Deployment{ ObjectMeta: metav1.ObjectMeta{ Name: "service-dlp", Namespace: "namespace", @@ -135,7 +135,7 @@ func TestUpdateExpose(t *testing.T) { Namespace: "namespace", }, }, - &v1.Deployment{ + &appsv1.Deployment{ ObjectMeta: metav1.ObjectMeta{ Name: "service-dlp", Namespace: "namespace", From 2909bf1730bda5a480126e29fb15ea731bd4026f Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 8 Oct 2024 12:48:53 +0200 Subject: [PATCH 016/106] Improve tests --- pkg/types/expose_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go index 6097ac40..e0185f09 100644 --- a/pkg/types/expose_test.go +++ b/pkg/types/expose_test.go @@ -56,6 +56,7 @@ func TestCreateExpose(t *testing.T) { MinScale: 1, MaxScale: 3, CpuThreshold: 80, + SetAuth: true, }, } cfg := &Config{ServicesNamespace: "namespace"} @@ -72,6 +73,7 @@ func TestCreateExpose(t *testing.T) { {Verb: "create", Resource: "horizontalpodautoscalers"}, {Verb: "create", Resource: "services"}, {Verb: "create", Resource: "ingresses"}, + {Verb: "create", Resource: "secrets"}, } if CompareActions(actions, expected_actions) == false { @@ -158,6 +160,7 @@ func TestUpdateExpose(t *testing.T) { MinScale: 1, MaxScale: 3, CpuThreshold: 80, + SetAuth: true, }, } @@ -177,6 +180,7 @@ func TestUpdateExpose(t *testing.T) { {Verb: "update", Resource: "services"}, {Verb: "get", Resource: "ingresses"}, {Verb: "create", Resource: "ingresses"}, + {Verb: "create", Resource: "secrets"}, } if CompareActions(actions, expected_actions) == false { @@ -193,6 +197,7 @@ func TestServiceSpec(t *testing.T) { MaxScale: 3, CpuThreshold: 40, APIPort: 8080, + SetAuth: true, }, } cfg := &Config{Namespace: "namespace"} From 4427db903b7f56f4e7ce7b22c5e1a6c4cc6e3440 Mon Sep 17 00:00:00 2001 From: catttam Date: Tue, 8 Oct 2024 16:32:03 +0200 Subject: [PATCH 017/106] Bump OSCAR-UI version --- ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui b/ui index 045c25fb..3ce8470b 160000 --- a/ui +++ b/ui @@ -1 +1 @@ -Subproject commit 045c25fbf3acfeaaefcb44c0b183098bf196c7f1 +Subproject commit 3ce8470b994e73789ec086e612af66b9721f2aff From a640afdf951f93cf183f66254878c73f320d86f8 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 10 Oct 2024 16:52:32 +0200 Subject: [PATCH 018/106] Add create tests --- pkg/handlers/create_test.go | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 pkg/handlers/create_test.go diff --git a/pkg/handlers/create_test.go b/pkg/handlers/create_test.go new file mode 100644 index 00000000..a3f3d68b --- /dev/null +++ b/pkg/handlers/create_test.go @@ -0,0 +1,111 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package handlers + +import ( + "fmt" + "strings" + "testing" + + "net/http" + "net/http/httptest" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/backends" + "github.com/grycap/oscar/v3/pkg/types" +) + +func TestMakeCreateHandler(t *testing.T) { + back := backends.MakeFakeBackend() + + // Create a fake MinIO server + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + + if hreq.URL.Path != "/input" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) + } + + fmt.Println(hreq.URL.Path) + + if hreq.URL.Path == "/minio/admin/v3/info" { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) + } else { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"status": "success"}`)) + } + })) + + // and set the MinIO endpoint to the fake server + cfg := types.Config{ + MinIOProvider: &types.MinIOProvider{ + Endpoint: server.URL, + Region: "us-east-1", + AccessKey: "minioadmin", + SecretKey: "minioadmin", + Verify: false, + }, + } + r := gin.Default() + r.POST("/system/services", MakeCreateHandler(&cfg, back)) + + w := httptest.NewRecorder() + body := strings.NewReader(` + { + "name": "cowsay", + "cluster_id": "oscar", + "memory": "1Gi", + "cpu": "1.0", + "log_level": "CRITICAL", + "image": "ghcr.io/grycap/cowsay", + "alpine": false, + "script": "test", + "input": [ + { + "storage_provider": "minio", + "path": "/input" + } + ], + "output": [ + { + "storage_provider": "webdav.id", + "path": "/output" + } + ], + "storage_providers": { + "webdav": { + "id": { + "hostname": "` + server.URL + `", + "login": "user", + "password": "pass" + } + } + } + } + `) + + req, _ := http.NewRequest("POST", "/system/services", body) + r.ServeHTTP(w, req) + + // Close the fake MinIO server + defer server.Close() + + if w.Code != http.StatusCreated { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusCreated, w.Code) + } +} From 18ab2de640badd97bd4fe910496a39aa24f3e582 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 09:11:05 +0200 Subject: [PATCH 019/106] Add delete tests --- pkg/backends/fake.go | 10 +++- pkg/handlers/delete_test.go | 102 ++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 pkg/handlers/delete_test.go diff --git a/pkg/backends/fake.go b/pkg/backends/fake.go index c9ec6b26..79164785 100644 --- a/pkg/backends/fake.go +++ b/pkg/backends/fake.go @@ -31,7 +31,8 @@ var errFake = errors.New("fake error") // FakeBackend fake struct to mock the beahaviour of the ServerlessBackend interface type FakeBackend struct { - errors map[string][]error + errors map[string][]error + Service *types.Service // service to be returned by the ReadService function } // MakeFakeBackend returns the pointer of a new FakeBackend struct @@ -81,7 +82,12 @@ func (f *FakeBackend) CreateService(service types.Service) error { // ReadService returns a Service (fake) func (f *FakeBackend) ReadService(name string) (*types.Service, error) { - return &types.Service{Token: "AbCdEf123456"}, f.returnError(getCurrentFuncName()) + // default service returned by the function + service := &types.Service{Token: "AbCdEf123456"} + if f.Service != nil { + service = f.Service + } + return service, f.returnError(getCurrentFuncName()) } // UpdateService updates an existent service (fake) diff --git a/pkg/handlers/delete_test.go b/pkg/handlers/delete_test.go new file mode 100644 index 00000000..821e661d --- /dev/null +++ b/pkg/handlers/delete_test.go @@ -0,0 +1,102 @@ +package handlers + +import ( + "errors" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/backends" + "github.com/grycap/oscar/v3/pkg/types" + k8serr "k8s.io/apimachinery/pkg/api/errors" +) + +func TestMMakeDeleteHandler(t *testing.T) { + back := backends.MakeFakeBackend() + + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + if hreq.URL.Path != "/input" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) + } + })) + + // and set the MinIO endpoint to the fake server + cfg := types.Config{ + MinIOProvider: &types.MinIOProvider{ + Endpoint: server.URL, + Region: "us-east-1", + AccessKey: "minioadmin", + SecretKey: "minioadmin", + Verify: false, + }, + } + + svc := &types.Service{ + Token: "AbCdEf123456", + Input: []types.StorageIOConfig{ + {Provider: "minio." + types.DefaultProvider, Path: "/input"}, + }, + Output: []types.StorageIOConfig{ + {Provider: "minio." + types.DefaultProvider, Path: "/output"}, + }, + StorageProviders: &types.StorageProviders{ + MinIO: map[string]*types.MinIOProvider{types.DefaultProvider: { + Region: "us-east-1", + Endpoint: server.URL, + AccessKey: "ak", + SecretKey: "sk"}}, + }} + back.Service = svc + + r := gin.Default() + r.DELETE("/system/services/:serviceName", MakeDeleteHandler(&cfg, back)) + + scenarios := []struct { + name string + returnError bool + errType string + }{ + {"valid", false, ""}, + {"Service Not Found test", true, "404"}, + {"Internal Server Error test", true, "500"}, + } + + for _, s := range scenarios { + t.Run(s.name, func(t *testing.T) { + w := httptest.NewRecorder() + + if s.returnError { + switch s.errType { + case "404": + back.AddError("DeleteService", k8serr.NewGone("Not Found")) + case "500": + err := errors.New("Not found") + back.AddError("DeleteService", k8serr.NewInternalError(err)) + } + } + serviceName := "testName" + req, _ := http.NewRequest("DELETE", "/system/services/"+serviceName, nil) + + r.ServeHTTP(w, req) + + if s.returnError { + if s.errType == "404" && w.Code != http.StatusNotFound { + t.Errorf("expecting code %d, got %d", http.StatusNotFound, w.Code) + } + + if s.errType == "500" && w.Code != http.StatusInternalServerError { + t.Errorf("expecting code %d, got %d", http.StatusInternalServerError, w.Code) + } + } else { + if w.Code != http.StatusNoContent { + t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) + } + } + }) + } + + // Close the fake MinIO server + defer server.Close() +} From af8edf240641fff7defdbae64b886886a778ec79 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 09:33:14 +0200 Subject: [PATCH 020/106] Fix typo --- pkg/handlers/job.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/handlers/job.go b/pkg/handlers/job.go index 53654aeb..e8c4e675 100644 --- a/pkg/handlers/job.go +++ b/pkg/handlers/job.go @@ -57,7 +57,7 @@ const ( InterLinkTolerationOperator = "Exists" ) -// MakeJobHandler makes a han/home/slangarita/Escritorio/interlink-cluster/PodCern/PodCern.yamldler to manage async invocations +// MakeJobHandler makes a handler to manage async invocations func MakeJobHandler(cfg *types.Config, kubeClientset *kubernetes.Clientset, back types.ServerlessBackend, rm resourcemanager.ResourceManager) gin.HandlerFunc { return func(c *gin.Context) { service, err := back.ReadService(c.Param("serviceName")) From 0854844cb287c4897b73d373be26cb01cdfc316b Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 09:58:11 +0200 Subject: [PATCH 021/106] Fix typo --- pkg/handlers/delete_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/handlers/delete_test.go b/pkg/handlers/delete_test.go index 821e661d..470350a3 100644 --- a/pkg/handlers/delete_test.go +++ b/pkg/handlers/delete_test.go @@ -13,7 +13,7 @@ import ( k8serr "k8s.io/apimachinery/pkg/api/errors" ) -func TestMMakeDeleteHandler(t *testing.T) { +func TestMakeDeleteHandler(t *testing.T) { back := backends.MakeFakeBackend() server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { From 86532cb8e7d48d298996e3a90d102c73dc76bf80 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 10:36:22 +0200 Subject: [PATCH 022/106] Add job tests --- pkg/handlers/job.go | 2 +- pkg/handlers/job_test.go | 44 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 pkg/handlers/job_test.go diff --git a/pkg/handlers/job.go b/pkg/handlers/job.go index e8c4e675..f4a1ecad 100644 --- a/pkg/handlers/job.go +++ b/pkg/handlers/job.go @@ -58,7 +58,7 @@ const ( ) // MakeJobHandler makes a handler to manage async invocations -func MakeJobHandler(cfg *types.Config, kubeClientset *kubernetes.Clientset, back types.ServerlessBackend, rm resourcemanager.ResourceManager) gin.HandlerFunc { +func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back types.ServerlessBackend, rm resourcemanager.ResourceManager) gin.HandlerFunc { return func(c *gin.Context) { service, err := back.ReadService(c.Param("serviceName")) if err != nil { diff --git a/pkg/handlers/job_test.go b/pkg/handlers/job_test.go new file mode 100644 index 00000000..f74e29d7 --- /dev/null +++ b/pkg/handlers/job_test.go @@ -0,0 +1,44 @@ +package handlers + +import ( + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + testclient "k8s.io/client-go/kubernetes/fake" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/backends" + "github.com/grycap/oscar/v3/pkg/types" +) + +func TestMakeJobHandler(t *testing.T) { + back := backends.MakeFakeBackend() + cfg := types.Config{} + kubeClient := testclient.NewSimpleClientset() + + r := gin.Default() + r.POST("/job/:serviceName", MakeJobHandler(&cfg, kubeClient, back, nil)) + + w := httptest.NewRecorder() + body := strings.NewReader(``) + serviceName := "testName" + req, _ := http.NewRequest("POST", "/job/services"+serviceName, body) + req.Header.Set("Authorization", "Bearer AbCdEf123456") + r.ServeHTTP(w, req) + + if w.Code != http.StatusCreated { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusCreated, w.Code) + } + + actions := kubeClient.Actions() + if len(actions) != 1 { + t.Errorf("Expected 1 action but got %d", len(actions)) + } + if actions[0].GetVerb() != "create" || actions[0].GetResource().Resource != "jobs" { + t.Errorf("Expected create job action but got %v", actions[0]) + } +} From 7fc3cfaf69cddf1f29768de5844e2957dda0a1de Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 12:05:24 +0200 Subject: [PATCH 023/106] Add update tests --- pkg/handlers/create_test.go | 3 +- pkg/handlers/status.go | 2 +- pkg/handlers/update_test.go | 108 ++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 pkg/handlers/update_test.go diff --git a/pkg/handlers/create_test.go b/pkg/handlers/create_test.go index a3f3d68b..58d523b4 100644 --- a/pkg/handlers/create_test.go +++ b/pkg/handlers/create_test.go @@ -94,7 +94,8 @@ func TestMakeCreateHandler(t *testing.T) { "password": "pass" } } - } + }, + "allowed_users": ["user1", "user2"] } `) diff --git a/pkg/handlers/status.go b/pkg/handlers/status.go index 231669f9..e77050c1 100644 --- a/pkg/handlers/status.go +++ b/pkg/handlers/status.go @@ -40,7 +40,7 @@ type NodeInfo struct { } // MakeStatusHandler Status handler for kubernetes deployment. -func MakeStatusHandler(kubeClientset *kubernetes.Clientset, metricsClientset *versioned.MetricsV1beta1Client) gin.HandlerFunc { +func MakeStatusHandler(kubeClientset kubernetes.Interface, metricsClientset *versioned.MetricsV1beta1Client) gin.HandlerFunc { return func(c *gin.Context) { // Get nodes list nodes, err := kubeClientset.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{}) diff --git a/pkg/handlers/update_test.go b/pkg/handlers/update_test.go new file mode 100644 index 00000000..988e67ba --- /dev/null +++ b/pkg/handlers/update_test.go @@ -0,0 +1,108 @@ +package handlers + +import ( + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/backends" + "github.com/grycap/oscar/v3/pkg/types" +) + +func TestMakeUpdateHandler(t *testing.T) { + back := backends.MakeFakeBackend() + + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + if hreq.URL.Path != "/input" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) + } + if hreq.URL.Path == "/minio/admin/v3/info" { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) + } else { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"status": "success"}`)) + } + })) + + svc := &types.Service{ + Token: "AbCdEf123456", + Input: []types.StorageIOConfig{ + {Provider: "minio." + types.DefaultProvider, Path: "/input"}, + }, + Output: []types.StorageIOConfig{ + {Provider: "minio." + types.DefaultProvider, Path: "/output"}, + }, + StorageProviders: &types.StorageProviders{ + MinIO: map[string]*types.MinIOProvider{types.DefaultProvider: { + Region: "us-east-1", + Endpoint: server.URL, + AccessKey: "ak", + SecretKey: "sk"}}, + }, + AllowedUsers: []string{"user1"}} + back.Service = svc + + // and set the MinIO endpoint to the fake server + cfg := types.Config{ + MinIOProvider: &types.MinIOProvider{ + Region: "us-east-1", + Endpoint: server.URL, + AccessKey: "ak", + SecretKey: "sk", + }, + } + + r := gin.Default() + r.PUT("/system/services", MakeUpdateHandler(&cfg, back)) + + w := httptest.NewRecorder() + body := strings.NewReader(` + { + "name": "cowsay", + "cluster_id": "oscar", + "memory": "1Gi", + "cpu": "1.0", + "log_level": "CRITICAL", + "image": "ghcr.io/grycap/cowsay", + "alpine": false, + "script": "test", + "input": [ + { + "storage_provider": "minio", + "path": "/input" + } + ], + "output": [ + { + "storage_provider": "webdav.id", + "path": "/output" + } + ], + "storage_providers": { + "webdav": { + "id": { + "hostname": "` + server.URL + `", + "login": "user", + "password": "pass" + } + } + }, + "allowed_users": ["user1", "user2"] + } + `) + req, _ := http.NewRequest("PUT", "/system/services", body) + r.ServeHTTP(w, req) + + // Close the fake MinIO server + defer server.Close() + + if w.Code != http.StatusNoContent { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) + } + +} From 7287a23568862c231ef85d8742d404f0ee5100fd Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 13:05:54 +0200 Subject: [PATCH 024/106] Add logs tests --- pkg/handlers/logs.go | 10 ++-- pkg/handlers/logs_test.go | 123 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 5 deletions(-) create mode 100644 pkg/handlers/logs_test.go diff --git a/pkg/handlers/logs.go b/pkg/handlers/logs.go index 5767af31..cc809827 100644 --- a/pkg/handlers/logs.go +++ b/pkg/handlers/logs.go @@ -35,7 +35,7 @@ import ( // TODO Try using cookies to avoid excesive calls to the k8s API // // MakeJobsInfoHandler makes a handler for listing all existing jobs from a service and show their JobInfo -func MakeJobsInfoHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { +func MakeJobsInfoHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { return func(c *gin.Context) { jobsInfo := make(map[string]*types.JobInfo) // Get serviceName @@ -103,7 +103,7 @@ func MakeJobsInfoHandler(back types.ServerlessBackend, kubeClientset *kubernetes // MakeDeleteJobsHandler makes a handler for deleting all jobs created by the provided service. // If 'all' querystring is set to 'true' pending, running and failed jobs will also be deleted -func MakeDeleteJobsHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { +func MakeDeleteJobsHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { return func(c *gin.Context) { // Get serviceName and jobName serviceName := c.Param("serviceName") @@ -147,7 +147,7 @@ func MakeDeleteJobsHandler(back types.ServerlessBackend, kubeClientset *kubernet } // MakeGetLogsHandler makes a handler for getting logs from the 'oscar-container' inside the pod created by the specified job -func MakeGetLogsHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { +func MakeGetLogsHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { return func(c *gin.Context) { // Get serviceName and jobName serviceName := c.Param("serviceName") @@ -200,7 +200,7 @@ func MakeGetLogsHandler(back types.ServerlessBackend, kubeClientset *kubernetes. } // MakeDeleteJobHandler makes a handler for removing a job -func MakeDeleteJobHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { +func MakeDeleteJobHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { return func(c *gin.Context) { // Get serviceName and jobName serviceName := c.Param("serviceName") @@ -251,7 +251,7 @@ func isOIDCAuthorised(c *gin.Context, back types.ServerlessBackend, serviceName // If is oidc auth get service and check on allowed users authHeader := c.GetHeader("Authorization") if len(strings.Split(authHeader, "Bearer")) > 1 { - service, _ := back.ReadService(c.Param("serviceName")) + service, _ := back.ReadService(serviceName) uid, err := auth.GetUIDFromContext(c) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintln(err)) diff --git a/pkg/handlers/logs_test.go b/pkg/handlers/logs_test.go new file mode 100644 index 00000000..bed388f1 --- /dev/null +++ b/pkg/handlers/logs_test.go @@ -0,0 +1,123 @@ +package handlers + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/backends" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + testclient "k8s.io/client-go/kubernetes/fake" +) + +func TestMakeJobsInfoHandler(t *testing.T) { + back := backends.MakeFakeBackend() + kubeClientset := testclient.NewSimpleClientset() + + r := gin.Default() + r.GET("/system/logs/:serviceName", MakeJobsInfoHandler(back, kubeClientset, "namespace")) + + w := httptest.NewRecorder() + serviceName := "test" + req, _ := http.NewRequest("GET", "/system/logs/"+serviceName, nil) + r.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusOK, w.Code) + } + + actions := kubeClientset.Actions() + if len(actions) != 2 { + t.Errorf("expecting 2 actions, got %d", len(actions)) + } + + if actions[0].GetVerb() != "list" || actions[0].GetResource().Resource != "jobs" { + t.Errorf("expecting list jobs, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) + } + if actions[1].GetVerb() != "list" || actions[1].GetResource().Resource != "pods" { + t.Errorf("expecting list pods, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) + } +} + +func TestMakeDeleteJobsHandler(t *testing.T) { + back := backends.MakeFakeBackend() + kubeClientset := testclient.NewSimpleClientset() + + r := gin.Default() + r.DELETE("/system/logs/:serviceName", MakeDeleteJobsHandler(back, kubeClientset, "namespace")) + + w := httptest.NewRecorder() + serviceName := "test" + req, _ := http.NewRequest("DELETE", "/system/logs/"+serviceName, nil) + r.ServeHTTP(w, req) + + if w.Code != http.StatusNoContent { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) + } + + actions := kubeClientset.Actions() + if len(actions) != 1 { + t.Errorf("expecting 1 actions, got %d", len(actions)) + } + + if actions[0].GetVerb() != "delete-collection" || actions[0].GetResource().Resource != "jobs" { + t.Errorf("expecting list jobs, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) + } +} + +func TestMakeGetLogsHandler(t *testing.T) { + back := backends.MakeFakeBackend() + + K8sObjects := []runtime.Object{ + &corev1.PodList{ + Items: []corev1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "namespace", + Labels: map[string]string{ + "oscar_service": "test", + "job-name": "job"}, + }, + }, + }, + }, + } + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + + r := gin.Default() + r.GET("/system/logs/:serviceName/:jobName", MakeGetLogsHandler(back, kubeClientset, "namespace")) + + w := httptest.NewRecorder() + serviceName := "test" + jobName := "job" + req, _ := http.NewRequest("GET", "/system/logs/"+serviceName+"/"+jobName, nil) + r.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusOK, w.Code) + } + if w.Body.String() != "fake logs" { + t.Errorf("expecting 'fake logs', got %s", w.Body.String()) + } + + actions := kubeClientset.Actions() + if len(actions) != 2 { + t.Errorf("expecting 2 actions, got %d", len(actions)) + } + + if actions[0].GetVerb() != "list" || actions[0].GetResource().Resource != "pods" { + t.Errorf("expecting list pods, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) + } + if actions[1].GetVerb() != "get" || actions[1].GetResource().Resource != "pods" { + t.Errorf("expecting get pods, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) + } + +} From 82b2a38935907755e458123a64b1ffaba41f1692 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 16:34:04 +0200 Subject: [PATCH 025/106] Add logs tests --- pkg/handlers/logs_test.go | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/pkg/handlers/logs_test.go b/pkg/handlers/logs_test.go index bed388f1..fb75fe89 100644 --- a/pkg/handlers/logs_test.go +++ b/pkg/handlers/logs_test.go @@ -8,6 +8,8 @@ import ( "github.com/gin-gonic/gin" "github.com/grycap/oscar/v3/pkg/backends" + "github.com/grycap/oscar/v3/pkg/types" + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -119,5 +121,52 @@ func TestMakeGetLogsHandler(t *testing.T) { if actions[1].GetVerb() != "get" || actions[1].GetResource().Resource != "pods" { t.Errorf("expecting get pods, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) } +} +func TestMakeDeleteJobHandler(t *testing.T) { + back := backends.MakeFakeBackend() + K8sObjects := []runtime.Object{ + &batchv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Name: "job", + Namespace: "namespace", + Labels: map[string]string{ + types.ServiceLabel: "test", + }, + }, + }, + } + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + + r := gin.Default() + r.Use(func(c *gin.Context) { + c.Set("uidOrigin", "some-uid-value") + c.Next() + }) + r.DELETE("/system/logs/:serviceName/:jobName", MakeDeleteJobHandler(back, kubeClientset, "namespace")) + + w := httptest.NewRecorder() + serviceName := "test" + jobName := "job" + req, _ := http.NewRequest("DELETE", "/system/logs/"+serviceName+"/"+jobName, nil) + req.Header.Set("Authorization", "Bearer AbCdEf123456") + r.ServeHTTP(w, req) + + if w.Code != http.StatusNoContent { + fmt.Println(w.Body) + t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) + } + + actions := kubeClientset.Actions() + if len(actions) != 2 { + t.Errorf("expecting 2 actions, got %d", len(actions)) + } + + if actions[0].GetVerb() != "get" || actions[0].GetResource().Resource != "jobs" { + t.Errorf("expecting get jobs, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) + } + + if actions[1].GetVerb() != "delete" || actions[1].GetResource().Resource != "jobs" { + t.Errorf("expecting delete jobs, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) + } } From 58b3aefa99d671b5058fa82a86c167dc7bf40ffa Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 15 Oct 2024 17:06:22 +0200 Subject: [PATCH 026/106] Add logs tests --- pkg/handlers/logs_test.go | 43 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/pkg/handlers/logs_test.go b/pkg/handlers/logs_test.go index fb75fe89..30c6ccea 100644 --- a/pkg/handlers/logs_test.go +++ b/pkg/handlers/logs_test.go @@ -18,7 +18,48 @@ import ( func TestMakeJobsInfoHandler(t *testing.T) { back := backends.MakeFakeBackend() - kubeClientset := testclient.NewSimpleClientset() + + K8sObjects := []runtime.Object{ + &batchv1.Job{ + Status: batchv1.JobStatus{ + StartTime: &metav1.Time{}, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "job", + Namespace: "namespace", + Labels: map[string]string{ + types.ServiceLabel: "test", + }, + }, + }, + &corev1.PodList{ + Items: []corev1.Pod{ + { + Status: corev1.PodStatus{ + Phase: corev1.PodRunning, + ContainerStatuses: []corev1.ContainerStatus{ + { + Name: types.ContainerName, + State: corev1.ContainerState{ + Running: &corev1.ContainerStateRunning{ + StartedAt: metav1.Time{}, + }, + }, + }, + }, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "namespace", + Labels: map[string]string{ + "oscar_service": "test", + "job-name": "job"}, + }, + }, + }, + }, + } + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) r := gin.Default() r.GET("/system/logs/:serviceName", MakeJobsInfoHandler(back, kubeClientset, "namespace")) From 4cd94adc72bbd879b32b3b72fa02c1e081d99c1f Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 18 Oct 2024 12:18:53 +0200 Subject: [PATCH 027/106] Update token --- pkg/handlers/delete_test.go | 2 +- pkg/handlers/job_test.go | 2 +- pkg/handlers/logs_test.go | 2 +- pkg/handlers/run_test.go | 2 +- pkg/handlers/update_test.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/handlers/delete_test.go b/pkg/handlers/delete_test.go index 470350a3..2f6bb0ca 100644 --- a/pkg/handlers/delete_test.go +++ b/pkg/handlers/delete_test.go @@ -34,7 +34,7 @@ func TestMakeDeleteHandler(t *testing.T) { } svc := &types.Service{ - Token: "AbCdEf123456", + Token: "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf", Input: []types.StorageIOConfig{ {Provider: "minio." + types.DefaultProvider, Path: "/input"}, }, diff --git a/pkg/handlers/job_test.go b/pkg/handlers/job_test.go index f74e29d7..6abfca6d 100644 --- a/pkg/handlers/job_test.go +++ b/pkg/handlers/job_test.go @@ -26,7 +26,7 @@ func TestMakeJobHandler(t *testing.T) { body := strings.NewReader(``) serviceName := "testName" req, _ := http.NewRequest("POST", "/job/services"+serviceName, body) - req.Header.Set("Authorization", "Bearer AbCdEf123456") + req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") r.ServeHTTP(w, req) if w.Code != http.StatusCreated { diff --git a/pkg/handlers/logs_test.go b/pkg/handlers/logs_test.go index 30c6ccea..3ae4345a 100644 --- a/pkg/handlers/logs_test.go +++ b/pkg/handlers/logs_test.go @@ -190,7 +190,7 @@ func TestMakeDeleteJobHandler(t *testing.T) { serviceName := "test" jobName := "job" req, _ := http.NewRequest("DELETE", "/system/logs/"+serviceName+"/"+jobName, nil) - req.Header.Set("Authorization", "Bearer AbCdEf123456") + req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") r.ServeHTTP(w, req) if w.Code != http.StatusNoContent { diff --git a/pkg/handlers/run_test.go b/pkg/handlers/run_test.go index e7c9fe3b..3d9d647d 100644 --- a/pkg/handlers/run_test.go +++ b/pkg/handlers/run_test.go @@ -76,7 +76,7 @@ func TestMakeRunHandler(t *testing.T) { err := errors.New("Not found") back.AddError("ReadService", k8serr.NewInternalError(err)) case "splitErr": - req.Header.Set("Authorization", "AbCdEf123456") + req.Header.Set("Authorization", "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") case "diffErr": req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513dfg") } diff --git a/pkg/handlers/update_test.go b/pkg/handlers/update_test.go index 988e67ba..b369bfe6 100644 --- a/pkg/handlers/update_test.go +++ b/pkg/handlers/update_test.go @@ -29,7 +29,7 @@ func TestMakeUpdateHandler(t *testing.T) { })) svc := &types.Service{ - Token: "AbCdEf123456", + Token: "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf", Input: []types.StorageIOConfig{ {Provider: "minio." + types.DefaultProvider, Path: "/input"}, }, From 23108fce59425e57ca33ad862ae042e07a951a7f Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 18 Oct 2024 12:26:23 +0200 Subject: [PATCH 028/106] Fix test --- pkg/handlers/job_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/handlers/job_test.go b/pkg/handlers/job_test.go index 6abfca6d..6150617a 100644 --- a/pkg/handlers/job_test.go +++ b/pkg/handlers/job_test.go @@ -23,7 +23,7 @@ func TestMakeJobHandler(t *testing.T) { r.POST("/job/:serviceName", MakeJobHandler(&cfg, kubeClient, back, nil)) w := httptest.NewRecorder() - body := strings.NewReader(``) + body := strings.NewReader(`{"Records": [{"requestParameters": {"principalId": "uid", "sourceIPAddress": "ip"}}]}`) serviceName := "testName" req, _ := http.NewRequest("POST", "/job/services"+serviceName, body) req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") From 4576e2162fad5061b3299ef24f9da84d1e0c4459 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 18 Oct 2024 13:30:25 +0200 Subject: [PATCH 029/106] Fix coverage badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a3d39b88..aaf93e3c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # OSCAR - Open Source Serverless Computing for Data-Processing Applications [![Go Report Card](https://goreportcard.com/badge/github.com/grycap/oscar)](https://goreportcard.com/report/github.com/grycap/oscar) -[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/8145efdfb9d24af1b5b53e21c6e2df99)](https://www.codacy.com/gh/grycap/oscar/dashboard?utm_source=github.com&utm_medium=referral&utm_content=grycap/oscar&utm_campaign=Badge_Coverage) +[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/8145efdfb9d24af1b5b53e21c6e2df99)](https://app.codacy.com/gh/grycap/oscar/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage) [![tests](https://github.com/grycap/oscar/actions/workflows/tests.yaml/badge.svg?branch=master)](https://github.com/grycap/oscar/actions/workflows/tests.yaml) [![build](https://github.com/grycap/oscar/workflows/build/badge.svg)](https://github.com/grycap/oscar/actions?query=workflow%3Abuild) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/grycap/oscar)](https://github.com/grycap/oscar/pkgs/container/oscar) From 7f5faf67d65797941342e9d8752775b50616ea44 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 18 Oct 2024 13:42:48 +0200 Subject: [PATCH 030/106] Fix go report badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aaf93e3c..f01c67c9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # OSCAR - Open Source Serverless Computing for Data-Processing Applications -[![Go Report Card](https://goreportcard.com/badge/github.com/grycap/oscar)](https://goreportcard.com/report/github.com/grycap/oscar) +[![Go Report Card](https://goreportcard.com/badge/github.com/grycap/oscar/v3)](https://goreportcard.com/report/github.com/grycap/oscar/v3) [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/8145efdfb9d24af1b5b53e21c6e2df99)](https://app.codacy.com/gh/grycap/oscar/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage) [![tests](https://github.com/grycap/oscar/actions/workflows/tests.yaml/badge.svg?branch=master)](https://github.com/grycap/oscar/actions/workflows/tests.yaml) [![build](https://github.com/grycap/oscar/workflows/build/badge.svg)](https://github.com/grycap/oscar/actions?query=workflow%3Abuild) From e8fecf6b00ab121f73e0e4ab7070ec385f9fa83a Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 18 Oct 2024 13:50:01 +0200 Subject: [PATCH 031/106] Fix misspell errors --- pkg/handlers/create.go | 4 ++-- pkg/handlers/update.go | 2 +- pkg/types/service.go | 2 +- pkg/utils/yunikorn.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/handlers/create.go b/pkg/handlers/create.go index 3bb2e260..095dbe09 100644 --- a/pkg/handlers/create.go +++ b/pkg/handlers/create.go @@ -121,7 +121,7 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand if !ownerOnList { service.AllowedUsers = append(service.AllowedUsers, uid) } - // Check if the uid's from allowed_users have and asociated MinIO user + // Check if the uid's from allowed_users have and associated MinIO user // and create it if not uids := mc.CheckUsersInCache(service.AllowedUsers) if len(uids) > 0 { @@ -282,7 +282,7 @@ func createBuckets(service *types.Service, cfg *types.Config, minIOAdminClient * // Create group for the service and add users // Check if users in allowed_users have a MinIO associated user - // If new allowed users list is empty the service becames public + // If new allowed users list is empty the service becomes public if !isUpdate { if !isAdminUser { if len(allowed_users) == 0 { diff --git a/pkg/handlers/update.go b/pkg/handlers/update.go index cd97f826..e7dea13e 100644 --- a/pkg/handlers/update.go +++ b/pkg/handlers/update.go @@ -76,7 +76,7 @@ func MakeUpdateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand // Set the owner on the new service definition newService.Owner = oldService.Owner - // If the service has changed VO check permisions again + // If the service has changed VO check permission again if newService.VO != "" && newService.VO != oldService.VO { for _, vo := range cfg.OIDCGroups { if vo == newService.VO { diff --git a/pkg/types/service.go b/pkg/types/service.go index f8d51e67..20098ab3 100644 --- a/pkg/types/service.go +++ b/pkg/types/service.go @@ -260,7 +260,7 @@ type Service struct { InterLinkNodeName string `json:"interlink_node_name"` // List of EGI UID's identifying the users that will have visibility of the service and its MinIO storage provider - // Optional (If the list is empty we asume the visibility is public for all cluster users) + // Optional (If the list is empty we assume the visibility is public for all cluster users) AllowedUsers []string `json:"allowed_users"` // Configuration to create a storage provider as a volume inside the service container diff --git a/pkg/utils/yunikorn.go b/pkg/utils/yunikorn.go index 38f3f6f0..fbf9fb07 100644 --- a/pkg/utils/yunikorn.go +++ b/pkg/utils/yunikorn.go @@ -151,7 +151,7 @@ func DeleteYunikornQueue(cfg *types.Config, kubeClientset kubernetes.Interface, // getOscarQueue returns a pointer to the OSCAR's Yunikorn queue (configs.QueueConfig) // If the Queue doesn't exists, create a new one in the SchedulerConfig -// (the existance of the default partition and the root queue is assumed) +// (the existence of the default partition and the root queue is assumed) func getOscarQueue(schedulerConfig *configs.SchedulerConfig) *configs.QueueConfig { // First get a pointer to the root queue root := &configs.QueueConfig{} From daee11ce0dfff6c8bf5280697c020548ecff44f2 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 18 Oct 2024 13:52:38 +0200 Subject: [PATCH 032/106] Fix misspell errors --- pkg/types/expose.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/types/expose.go b/pkg/types/expose.go index 6ce2499c..09b758b4 100644 --- a/pkg/types/expose.go +++ b/pkg/types/expose.go @@ -152,7 +152,7 @@ func UpdateExpose(service Service, kubeClientset kubernetes.Interface, cfg *Conf // TODO check and refactor // Main function that list all the kubernetes components -// This function is not used, in the future could be usefull +// This function is not used, in the future could be useful func ListExpose(kubeClientset kubernetes.Interface, cfg *Config) error { deploy, hpa, err := listDeployments(kubeClientset, cfg) From bcf766b94e2bf0bf32b962f3e529bc321ca7732a Mon Sep 17 00:00:00 2001 From: Dialdroid Date: Mon, 21 Oct 2024 11:44:29 +0200 Subject: [PATCH 033/106] Added YOLOv8 example in English and other related changes --- examples/yolov8/README.md | 24 ++++++++++++++++++++ examples/yolov8/img/cat.jpg | Bin 0 -> 22672 bytes examples/yolov8/img/cat.jpg:Zone.Identifier | 4 ++++ examples/yolov8/script.sh | 8 +++++++ examples/yolov8/yolov8.yaml | 17 ++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 examples/yolov8/README.md create mode 100644 examples/yolov8/img/cat.jpg create mode 100644 examples/yolov8/img/cat.jpg:Zone.Identifier create mode 100644 examples/yolov8/script.sh create mode 100644 examples/yolov8/yolov8.yaml diff --git a/examples/yolov8/README.md b/examples/yolov8/README.md new file mode 100644 index 00000000..a4645e5f --- /dev/null +++ b/examples/yolov8/README.md @@ -0,0 +1,24 @@ +# Object Detection with YOLOv8 + +Detect objects in images using the state-of-the-art YOLOv8 model. + +## About YOLO + +This node utilizes the YOLOv8 (You Only Look Once version 8) model to detect objects within images. YOLOv8 is a cutting-edge, real-time object detection system known for its speed and accuracy, capable of identifying thousands of object categories efficiently. + +## About YOLOV8 Service in OSCAR + +This service uses the pre-trained YOLOv8 model provided by DEEP-Hybrid-DataCloud for object detection. It is designed to handle synchronous invocations and real-time image processing with high scalability, managed automatically by an elastic Kubernetes cluster. + +In order to invoke the function, first you have to create a service, either by the OSCAR UI or by using the FDL within the following command. + + +``` sh +oscar-cli apply yolov8.yaml +``` + +Once the service is created you can make the invocation with the following +command, which will store the output on a minio bucket. + +``` sh +oscar-cli service put-file yolov8.yaml minio img/cat.jpg yolov8/input/cat.jpg \ No newline at end of file diff --git a/examples/yolov8/img/cat.jpg b/examples/yolov8/img/cat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..016cdd8250cf8f68f985f51ae429e5def72469ac GIT binary patch literal 22672 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 literal 0 HcmV?d00001 diff --git a/examples/yolov8/img/cat.jpg:Zone.Identifier b/examples/yolov8/img/cat.jpg:Zone.Identifier new file mode 100644 index 00000000..db4f2e84 --- /dev/null +++ b/examples/yolov8/img/cat.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://www.google.com/ +HostUrl=https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Cat_November_2010-1a.jpg/220px-Cat_November_2010-1a.jpg diff --git a/examples/yolov8/script.sh b/examples/yolov8/script.sh new file mode 100644 index 00000000..631e4552 --- /dev/null +++ b/examples/yolov8/script.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +IMAGE_NAME=`basename "$INPUT_FILE_PATH"` +OUTPUT_FILE="$TMP_OUTPUT_DIR/output.png" + +deepaas-cli --deepaas_method_output="$OUTPUT_FILE" predict --files "$INPUT_FILE_PATH" --accept image/png 2>&1 + +echo "Prediction was saved in: $OUTPUT_FILE" \ No newline at end of file diff --git a/examples/yolov8/yolov8.yaml b/examples/yolov8/yolov8.yaml new file mode 100644 index 00000000..0db5095c --- /dev/null +++ b/examples/yolov8/yolov8.yaml @@ -0,0 +1,17 @@ +functions: + oscar: + - oscar-cluster: + name: yolov8 + memory: 4Gi + cpu: '2.0' + image: ai4oshub/ai4os-yolov8-torch:latest + script: script.sh + vo: vo.imagine-ai.eu + allowed_users: [] + log_level: CRITICAL + input: + - storage_provider: minio.default + path: yolov8/input + output: + - storage_provider: minio.default + path: yolov8/output \ No newline at end of file From c0b0cc54ef0b29cfe55a5002fa401ce7fa07ed69 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Mon, 21 Oct 2024 13:54:13 +0200 Subject: [PATCH 034/106] Add minio utils tests --- pkg/handlers/logs_test.go | 25 +++++++- pkg/utils/minio_test.go | 125 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 pkg/utils/minio_test.go diff --git a/pkg/handlers/logs_test.go b/pkg/handlers/logs_test.go index 30c6ccea..82e07146 100644 --- a/pkg/handlers/logs_test.go +++ b/pkg/handlers/logs_test.go @@ -1,10 +1,13 @@ package handlers import ( + "encoding/json" "fmt" "net/http" "net/http/httptest" + "reflect" "testing" + "time" "github.com/gin-gonic/gin" "github.com/grycap/oscar/v3/pkg/backends" @@ -18,11 +21,12 @@ import ( func TestMakeJobsInfoHandler(t *testing.T) { back := backends.MakeFakeBackend() + now := time.Now() K8sObjects := []runtime.Object{ &batchv1.Job{ Status: batchv1.JobStatus{ - StartTime: &metav1.Time{}, + StartTime: &metav1.Time{Time: now}, }, ObjectMeta: metav1.ObjectMeta{ Name: "job", @@ -42,7 +46,7 @@ func TestMakeJobsInfoHandler(t *testing.T) { Name: types.ContainerName, State: corev1.ContainerState{ Running: &corev1.ContainerStateRunning{ - StartedAt: metav1.Time{}, + StartedAt: metav1.Time{Time: now}, }, }, }, @@ -74,6 +78,23 @@ func TestMakeJobsInfoHandler(t *testing.T) { t.Errorf("expecting code %d, got %d", http.StatusOK, w.Code) } + var response map[string]interface{} + if err := json.Unmarshal(w.Body.Bytes(), &response); err != nil { + t.Errorf("response is not valid JSON: %v", err) + } + + expected := map[string]interface{}{ + "job": map[string]interface{}{ + "status": "Running", + "creation_time": now.UTC().Format(time.RFC3339), + "start_time": now.UTC().Format(time.RFC3339), + }, + } + + if !reflect.DeepEqual(response, expected) { + t.Errorf("expecting %v, got %v", expected, response) + } + actions := kubeClientset.Actions() if len(actions) != 2 { t.Errorf("expecting 2 actions, got %d", len(actions)) diff --git a/pkg/utils/minio_test.go b/pkg/utils/minio_test.go new file mode 100644 index 00000000..2741df50 --- /dev/null +++ b/pkg/utils/minio_test.go @@ -0,0 +1,125 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/grycap/oscar/v3/pkg/types" +) + +func createMinIOConfig() (types.Config, *httptest.Server) { + // Create a fake MinIO server + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + fmt.Println(hreq.URL.Path) + if !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + rw.WriteHeader(http.StatusNotFound) + } + + if hreq.URL.Path == "/minio/admin/v3/info-canned-policy" { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"PolicyName": "testpolicy", "Policy": {"Version": "version","Statement": [{"Resource": ["res"]}]}}`)) + } else { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"Status": "success"}`)) + } + })) + + cfg := types.Config{ + MinIOProvider: &types.MinIOProvider{ + Endpoint: server.URL, + Region: "us-east-1", + AccessKey: "minioadmin", + SecretKey: "minioadmin", + Verify: false, + }, + Name: "test", + Namespace: "default", + ServicePort: 8080, + } + + return cfg, server +} + +func TestCreateMinIOUser(t *testing.T) { + // Create a fake MinIO server + cfg, server := createMinIOConfig() + + client, err := MakeMinIOAdminClient(&cfg) + + if err != nil { + t.Errorf("Error creating MinIO client: %v", err) + } + + err = client.CreateMinIOUser("testuser", "testpassword") + + if err != nil { + t.Errorf("Error creating MinIO user: %v", err) + } + + // Close the fake MinIO server + defer server.Close() +} + +func TestPublicToPrivateBucket(t *testing.T) { + // Create a fake MinIO server + cfg, server := createMinIOConfig() + + client, _ := MakeMinIOAdminClient(&cfg) + err := client.PublicToPrivateBucket("testbucket", []string{"testuser"}) + + if err != nil { + t.Errorf("Error creating MinIO user: %v", err) + } + + // Close the fake MinIO server + defer server.Close() +} + +func TestCreateServiceGroup(t *testing.T) { + // Create a fake MinIO server + cfg, server := createMinIOConfig() + + client, _ := MakeMinIOAdminClient(&cfg) + err := client.CreateServiceGroup("bucket") + + if err != nil { + t.Errorf("Error creating MinIO user: %v", err) + } + + // Close the fake MinIO server + defer server.Close() +} + +func TestPrivateToPublicBucket(t *testing.T) { + // Create a fake MinIO server + cfg, server := createMinIOConfig() + + client, _ := MakeMinIOAdminClient(&cfg) + err := client.PrivateToPublicBucket("testbucket") + + if err != nil { + t.Errorf("Error creating MinIO user: %v", err) + } + + // Close the fake MinIO server + defer server.Close() +} From e9cfb127aebb0c92af079daf21f3aa8d8414a6cd Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 08:27:15 +0200 Subject: [PATCH 035/106] Add yunikorn tests --- .../plant-classification-theano/README.md | 2 +- pkg/utils/yunikorn_test.go | 106 ++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 pkg/utils/yunikorn_test.go diff --git a/examples/plant-classification-theano/README.md b/examples/plant-classification-theano/README.md index 53dc5b5a..94248e20 100644 --- a/examples/plant-classification-theano/README.md +++ b/examples/plant-classification-theano/README.md @@ -63,5 +63,5 @@ To run this example you need: 1. Once the function is executed, the output is automatically copied to the output bucket in minio, in this case `plant-classifier-out`. You can - download the ouput from here for further processing. + download the output from here for further processing. ![minio-out.png](img/Minio-OUT.png) diff --git a/pkg/utils/yunikorn_test.go b/pkg/utils/yunikorn_test.go new file mode 100644 index 00000000..862428f9 --- /dev/null +++ b/pkg/utils/yunikorn_test.go @@ -0,0 +1,106 @@ +package utils + +import ( + "testing" + + "github.com/apache/yunikorn-core/pkg/common/configs" + "github.com/grycap/oscar/v3/pkg/types" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func getFakeClientset() (*types.Config, *fake.Clientset) { + cfg := &types.Config{ + YunikornNamespace: "default", + YunikornConfigMap: "yunikorn-config", + YunikornConfigFileName: "yunikorn.yaml", + } + + cfgmap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: cfg.YunikornConfigMap, + Namespace: cfg.YunikornNamespace, + }, + Data: map[string]string{ + cfg.YunikornConfigFileName: ` +partitions: + - name: default + queues: + - name: root + queues: + - name: oscar + queues: + - name: test-service +`, + }, + } + return cfg, fake.NewSimpleClientset(cfgmap) +} + +func TestReadYunikornConfig(t *testing.T) { + cfg, clientset := getFakeClientset() + + schedulerConfig, err := readYunikornConfig(cfg, clientset) + if err != nil { + t.Errorf("Error Reading Yunikorn config: %v", err) + } + if schedulerConfig == nil { + t.Errorf("Error Reading Yunikorn config. SchedulerConfig is nil") + } +} + +func TestUpdateYunikornConfig(t *testing.T) { + cfg, clientset := getFakeClientset() + + schedulerConfig := &configs.SchedulerConfig{ + Partitions: []configs.PartitionConfig{ + { + Name: "default", + Queues: []configs.QueueConfig{ + { + Name: "root", + Queues: []configs.QueueConfig{ + { + Name: "oscar", + }, + }, + }, + }, + }, + }, + } + + err := updateYunikornConfig(cfg, clientset, schedulerConfig) + if err != nil { + t.Errorf("Error Updating Yunikorn config: %v", err) + } +} + +func TestAddYunikornQueue(t *testing.T) { + cfg, clientset := getFakeClientset() + + svc := &types.Service{ + Name: "test-service", + TotalMemory: "4Gi", + TotalCPU: "2", + } + + err := AddYunikornQueue(cfg, clientset, svc) + if err != nil { + t.Errorf("Error Adding Yunikorn config: %v", err) + } +} + +func TestDeleteYunikornQueue(t *testing.T) { + cfg, clientset := getFakeClientset() + + svc := &types.Service{ + Name: "test-service", + } + + err := DeleteYunikornQueue(cfg, clientset, svc) + if err != nil { + t.Errorf("Error Deleting Yunikorn config: %v", err) + } +} From 2e577997c4f6e1b31a5dea7274865695fe3f4b3c Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 08:36:38 +0200 Subject: [PATCH 036/106] Add yunikorn tests --- pkg/utils/yunikorn_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/utils/yunikorn_test.go b/pkg/utils/yunikorn_test.go index 862428f9..25027403 100644 --- a/pkg/utils/yunikorn_test.go +++ b/pkg/utils/yunikorn_test.go @@ -45,7 +45,8 @@ func TestReadYunikornConfig(t *testing.T) { if err != nil { t.Errorf("Error Reading Yunikorn config: %v", err) } - if schedulerConfig == nil { + + if schedulerConfig.Partitions[0].Name != "default" { t.Errorf("Error Reading Yunikorn config. SchedulerConfig is nil") } } From 0ba775996de520c15685257b1c80298def0011e9 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 09:23:14 +0200 Subject: [PATCH 037/106] Improve tests --- pkg/handlers/create_test.go | 15 ++++++++++++--- pkg/utils/auth/multitenancy.go | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pkg/handlers/create_test.go b/pkg/handlers/create_test.go index 58d523b4..2c5fc6f8 100644 --- a/pkg/handlers/create_test.go +++ b/pkg/handlers/create_test.go @@ -27,15 +27,18 @@ import ( "github.com/gin-gonic/gin" "github.com/grycap/oscar/v3/pkg/backends" "github.com/grycap/oscar/v3/pkg/types" + "github.com/grycap/oscar/v3/pkg/utils/auth" + testclient "k8s.io/client-go/kubernetes/fake" ) func TestMakeCreateHandler(t *testing.T) { back := backends.MakeFakeBackend() + kubeClientset := testclient.NewSimpleClientset() // Create a fake MinIO server server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path != "/input" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + if hreq.URL.Path != "/test" && hreq.URL.Path != "/test/input/" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) } @@ -61,6 +64,11 @@ func TestMakeCreateHandler(t *testing.T) { }, } r := gin.Default() + r.Use(func(c *gin.Context) { + c.Set("uidOrigin", "somelonguid@egi.eu") + c.Set("multitenancyConfig", auth.NewMultitenancyConfig(kubeClientset, "somelonguid@egi.eu")) + c.Next() + }) r.POST("/system/services", MakeCreateHandler(&cfg, back)) w := httptest.NewRecorder() @@ -77,7 +85,7 @@ func TestMakeCreateHandler(t *testing.T) { "input": [ { "storage_provider": "minio", - "path": "/input" + "path": "/test/input/" } ], "output": [ @@ -95,11 +103,12 @@ func TestMakeCreateHandler(t *testing.T) { } } }, - "allowed_users": ["user1", "user2"] + "allowed_users": ["somelonguid@egi.eu", "somelonguid2@egi.eu"] } `) req, _ := http.NewRequest("POST", "/system/services", body) + req.Header.Add("Authorization", "Bearer token") r.ServeHTTP(w, req) // Close the fake MinIO server diff --git a/pkg/utils/auth/multitenancy.go b/pkg/utils/auth/multitenancy.go index 8e5a8118..a9f50d6e 100644 --- a/pkg/utils/auth/multitenancy.go +++ b/pkg/utils/auth/multitenancy.go @@ -32,12 +32,12 @@ const ServicesNamespace = "oscar-svc" const ServiceLabelLength = 8 type MultitenancyConfig struct { - kubeClientset *kubernetes.Clientset + kubeClientset kubernetes.Interface owner_uid string usersCache []string } -func NewMultitenancyConfig(kubeClientset *kubernetes.Clientset, uid string) *MultitenancyConfig { +func NewMultitenancyConfig(kubeClientset kubernetes.Interface, uid string) *MultitenancyConfig { return &MultitenancyConfig{ kubeClientset: kubeClientset, owner_uid: uid, From 53c21d00613d43bc3f7bd3e1b0160f68e142c232 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 10:16:38 +0200 Subject: [PATCH 038/106] Add license header --- pkg/utils/yunikorn_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pkg/utils/yunikorn_test.go b/pkg/utils/yunikorn_test.go index 25027403..bef3181d 100644 --- a/pkg/utils/yunikorn_test.go +++ b/pkg/utils/yunikorn_test.go @@ -1,3 +1,18 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ package utils import ( From c6a6d3e0ad774dbff4bc3d4d34c43f07a5368344 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 10:16:51 +0200 Subject: [PATCH 039/106] Add mount test --- pkg/types/mount_test.go | 157 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 pkg/types/mount_test.go diff --git a/pkg/types/mount_test.go b/pkg/types/mount_test.go new file mode 100644 index 00000000..df7a3945 --- /dev/null +++ b/pkg/types/mount_test.go @@ -0,0 +1,157 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package types + +import ( + "testing" + + v1 "k8s.io/api/core/v1" +) + +func TestSetMount(t *testing.T) { + podSpec := &v1.PodSpec{} + service := Service{ + Mount: StorageIOConfig{ + Provider: "minio.provider", + Path: "test-bucket", + }, + StorageProviders: &StorageProviders{ + MinIO: map[string]*MinIOProvider{ + "provider": { + AccessKey: "test-access-key", + SecretKey: "test-secret-key", + Endpoint: "test-endpoint", + }, + }, + }, + } + cfg := &Config{} + + SetMount(podSpec, service, cfg) + + if len(podSpec.Containers) != 1 { + t.Fatalf("expected 1 container, got %d", len(podSpec.Containers)) + } + + container := podSpec.Containers[0] + if container.Name != rcloneContainerName { + t.Errorf("expected container name %s, got %s", rcloneContainerName, container.Name) + } + + if container.Image != rcloneContainerImage { + t.Errorf("expected container image %s, got %s", rcloneContainerImage, container.Image) + } + + expectedEnvVars := map[string]string{ + "MNT_POINT": rcloneFolderMount, + "MINIO_BUCKET": "test-bucket", + "AWS_ACCESS_KEY_ID": "test-access-key", + "AWS_SECRET_ACCESS_KEY": "test-secret-key", + "MINIO_ENDPOINT": "test-endpoint", + } + + for _, envVar := range container.Env { + if expectedValue, ok := expectedEnvVars[envVar.Name]; ok { + if envVar.Value != expectedValue { + t.Errorf("expected env var %s to have value %s, got %s", envVar.Name, expectedValue, envVar.Value) + } + } else { + t.Errorf("unexpected env var %s", envVar.Name) + } + } + + if len(container.VolumeMounts) != 4 { + t.Fatalf("expected 4 volume mounts, got %d", len(container.VolumeMounts)) + } + + if len(podSpec.Volumes) != 2 { + t.Fatalf("expected 2 volumes, got %d", len(podSpec.Volumes)) + } +} + +func TestSetMinIOEnvVars(t *testing.T) { + service := Service{ + Mount: StorageIOConfig{ + Path: "test-bucket", + }, + StorageProviders: &StorageProviders{ + MinIO: map[string]*MinIOProvider{ + "provider": { + AccessKey: "test-access-key", + SecretKey: "test-secret-key", + Endpoint: "test-endpoint", + }, + }, + }, + } + providerId := "provider" + + envVars := setMinIOEnvVars(service, providerId) + + expectedEnvVars := map[string]string{ + "MINIO_BUCKET": "test-bucket", + "AWS_ACCESS_KEY_ID": "test-access-key", + "AWS_SECRET_ACCESS_KEY": "test-secret-key", + "MINIO_ENDPOINT": "test-endpoint", + } + + for _, envVar := range envVars { + if expectedValue, ok := expectedEnvVars[envVar.Name]; ok { + if envVar.Value != expectedValue { + t.Errorf("expected env var %s to have value %s, got %s", envVar.Name, expectedValue, envVar.Value) + } + } else { + t.Errorf("unexpected env var %s", envVar.Name) + } + } +} + +func TestSetWebDavEnvVars(t *testing.T) { + service := Service{ + Mount: StorageIOConfig{ + Path: "test-folder", + }, + StorageProviders: &StorageProviders{ + WebDav: map[string]*WebDavProvider{ + "provider": { + Login: "test-login", + Password: "test-password", + Hostname: "test-hostname", + }, + }, + }, + } + providerId := "provider" + + envVars := setWebDavEnvVars(service, providerId) + + expectedEnvVars := map[string]string{ + "WEBDAV_FOLDER": "test-folder", + "WEBDAV_LOGIN": "test-login", + "WEBDAV_PASSWORD": "test-password", + "WEBDAV_HOSTNAME": "https://test-hostname", + } + + for _, envVar := range envVars { + if expectedValue, ok := expectedEnvVars[envVar.Name]; ok { + if envVar.Value != expectedValue { + t.Errorf("expected env var %s to have value %s, got %s", envVar.Name, expectedValue, envVar.Value) + } + } else { + t.Errorf("unexpected env var %s", envVar.Name) + } + } +} From 3288209ce89fc057eee7687ccf9601ba02b6706d Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 10:21:00 +0200 Subject: [PATCH 040/106] Add interlink test --- pkg/types/interlink_test.go | 120 ++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 pkg/types/interlink_test.go diff --git a/pkg/types/interlink_test.go b/pkg/types/interlink_test.go new file mode 100644 index 00000000..3b15f8ba --- /dev/null +++ b/pkg/types/interlink_test.go @@ -0,0 +1,120 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package types + +import ( + "encoding/base64" + "testing" + + v1 "k8s.io/api/core/v1" +) + +func TestSetInterlinkJob(t *testing.T) { + podSpec := &v1.PodSpec{} + service := &Service{InterLinkNodeName: "test-node"} + cfg := &Config{SupervisorKitImage: "test-image"} + eventBytes := []byte("test-event") + + command, event, args := SetInterlinkJob(podSpec, service, cfg, eventBytes) + + if len(command) != 2 || command[0] != "/bin/sh" || command[1] != "-c" { + t.Errorf("Unexpected command: %v", command) + } + + expectedEventValue := base64.StdEncoding.EncodeToString(eventBytes) + if event.Name != EventVariable || event.Value != expectedEventValue { + t.Errorf("Unexpected event: %v", event) + } + + expectedArgs := "echo $EVENT | base64 -d | " + SupervisorMountPath + "/supervisor" + if len(args) != 1 || args[0] != expectedArgs { + t.Errorf("Unexpected args: %v", args) + } + + if podSpec.NodeSelector[NodeSelectorKey] != service.InterLinkNodeName { + t.Errorf("Unexpected NodeSelector: %v", podSpec.NodeSelector) + } + + if podSpec.DNSPolicy != InterLinkDNSPolicy { + t.Errorf("Unexpected DNSPolicy: %v", podSpec.DNSPolicy) + } + + if podSpec.RestartPolicy != InterLinkRestartPolicy { + t.Errorf("Unexpected RestartPolicy: %v", podSpec.RestartPolicy) + } + + if len(podSpec.Tolerations) != 1 || podSpec.Tolerations[0].Key != InterLinkTolerationKey || podSpec.Tolerations[0].Operator != InterLinkTolerationOperator { + t.Errorf("Unexpected Tolerations: %v", podSpec.Tolerations) + } +} + +func TestSetInterlinkService(t *testing.T) { + podSpec := &v1.PodSpec{ + Containers: []v1.Container{ + {}, + }, + } + + SetInterlinkService(podSpec) + + if podSpec.Containers[0].ImagePullPolicy != "Always" { + t.Errorf("Unexpected ImagePullPolicy: %v", podSpec.Containers[0].ImagePullPolicy) + } + + if len(podSpec.Containers[0].VolumeMounts) != 1 || podSpec.Containers[0].VolumeMounts[0].Name != NameSupervisorVolume || podSpec.Containers[0].VolumeMounts[0].MountPath != SupervisorMountPath { + t.Errorf("Unexpected VolumeMounts: %v", podSpec.Containers[0].VolumeMounts) + } + + if len(podSpec.Volumes) != 1 || podSpec.Volumes[0].Name != NameSupervisorVolume || podSpec.Volumes[0].VolumeSource.EmptyDir == nil { + t.Errorf("Unexpected Volumes: %v", podSpec.Volumes) + } +} + +func TestAddInitContainer(t *testing.T) { + podSpec := &v1.PodSpec{} + cfg := &Config{SupervisorKitImage: "test-image"} + + addInitContainer(podSpec, cfg) + + if len(podSpec.InitContainers) != 1 { + t.Fatalf("Expected 1 init container, got %d", len(podSpec.InitContainers)) + } + + initContainer := podSpec.InitContainers[0] + if initContainer.Name != ContainerSupervisorName { + t.Errorf("Unexpected init container name: %v", initContainer.Name) + } + + if len(initContainer.Command) != 2 || initContainer.Command[0] != "/bin/sh" || initContainer.Command[1] != "-c" { + t.Errorf("Unexpected init container command: %v", initContainer.Command) + } + + if len(initContainer.Args) != 1 || initContainer.Args[0] != SupervisorArg { + t.Errorf("Unexpected init container args: %v", initContainer.Args) + } + + if initContainer.Image != cfg.SupervisorKitImage { + t.Errorf("Unexpected init container image: %v", initContainer.Image) + } + + if initContainer.ImagePullPolicy != v1.PullIfNotPresent { + t.Errorf("Unexpected init container image pull policy: %v", initContainer.ImagePullPolicy) + } + + if len(initContainer.VolumeMounts) != 1 || initContainer.VolumeMounts[0].Name != NameSupervisorVolume || initContainer.VolumeMounts[0].MountPath != SupervisorMountPath { + t.Errorf("Unexpected init container volume mounts: %v", initContainer.VolumeMounts) + } +} From 990a9a82a9fcf4fce246f4b4e653edc5cf675229 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 10:53:48 +0200 Subject: [PATCH 041/106] Add daemonset test --- go.mod | 1 + go.sum | 2 + pkg/imagepuller/daemonset_test.go | 72 +++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 pkg/imagepuller/daemonset_test.go diff --git a/go.mod b/go.mod index ddb974fc..508637a0 100644 --- a/go.mod +++ b/go.mod @@ -52,6 +52,7 @@ require ( ) require ( + bou.ke/monkey v1.0.2 github.com/GehirnInc/crypt v0.0.0-20190301055215-6c0105aabd46 // indirect github.com/apache/yunikorn-scheduler-interface v1.2.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect diff --git a/go.sum b/go.sum index 3d436868..5b2acea4 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI= +bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d h1:LblfooH1lKOpp1hIhukktmSAxFkqMPFk9KR6iZ0MJNI= diff --git a/pkg/imagepuller/daemonset_test.go b/pkg/imagepuller/daemonset_test.go new file mode 100644 index 00000000..96f1f96f --- /dev/null +++ b/pkg/imagepuller/daemonset_test.go @@ -0,0 +1,72 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package imagepuller + +import ( + "testing" + + "bou.ke/monkey" + "github.com/grycap/oscar/v3/pkg/types" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" +) + +func TestCreateDaemonset(t *testing.T) { + cfg := &types.Config{ + ServicesNamespace: "default", + } + service := types.Service{ + Name: "test-service", + Image: "test-image", + ImagePullSecrets: []string{"test-secret"}, + } + kubeClientset := fake.NewSimpleClientset() + + // Patch the GetDataFromAPI function to return a mock result + monkey.Patch(watchPods, func(kubernetes.Interface, *types.Config) { + }) + + err := CreateDaemonset(cfg, service, kubeClientset) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + + actions := kubeClientset.Actions() + if len(actions) != 2 { + t.Errorf("Expected 2 action but got %d", len(actions)) + } + if actions[0].GetVerb() != "list" || actions[0].GetResource().Resource != "nodes" { + t.Errorf("Expected create job action but got %v", actions[0]) + } + if actions[1].GetVerb() != "create" || actions[1].GetResource().Resource != "daemonsets" { + t.Errorf("Expected create job action but got %v", actions[1]) + } + + daemonset := getDaemonset(cfg, service) + + if daemonset.Name != "image-puller-test-service" { + t.Errorf("expected daemonset name to be 'image-puller-test-service', got %s", daemonset.Name) + } + + if daemonset.Namespace != cfg.ServicesNamespace { + t.Errorf("expected daemonset namespace to be '%s', got %s", cfg.ServicesNamespace, daemonset.Namespace) + } + + if daemonset.Spec.Template.Spec.Containers[0].Image != service.Image { + t.Errorf("expected container image to be '%s', got %s", service.Image, daemonset.Spec.Template.Spec.Containers[0].Image) + } +} From a9e3c8196cec4eb88218512ee0b3cae446cac2fa Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Tue, 22 Oct 2024 16:47:55 +0200 Subject: [PATCH 042/106] Add tests --- go.sum | 14 ---- pkg/handlers/config_test.go | 108 ++++++++++++++++++++++++++++++ pkg/handlers/health_test.go | 50 ++++++++++++++ pkg/imagepuller/daemonset_test.go | 2 +- 4 files changed, 159 insertions(+), 15 deletions(-) create mode 100644 pkg/handlers/config_test.go create mode 100644 pkg/handlers/health_test.go diff --git a/go.sum b/go.sum index 5b2acea4..67ddba40 100644 --- a/go.sum +++ b/go.sum @@ -151,8 +151,6 @@ github.com/grycap/cdmi-client-go v0.1.1/go.mod h1:ZqWeQS3YBJVXxg3HOIkAu1MLNJ4+7s github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -276,18 +274,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= diff --git a/pkg/handlers/config_test.go b/pkg/handlers/config_test.go new file mode 100644 index 00000000..a7526609 --- /dev/null +++ b/pkg/handlers/config_test.go @@ -0,0 +1,108 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package handlers + +import ( + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/types" +) + +func TestMakeConfigHandler(t *testing.T) { + gin.SetMode(gin.TestMode) + + cfg := &types.Config{ + // Initialize with necessary fields + MinIOProvider: &types.MinIOProvider{ + Endpoint: "http://minio.example.com", + Verify: true, + Region: "us-east-1", + }, + } + + t.Run("Without Authorization Header", func(t *testing.T) { + router := gin.New() + router.GET("/config", MakeConfigHandler(cfg)) + + req, _ := http.NewRequest("GET", "/config", nil) + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Fatalf("expected status code 200, got %d", w.Code) + } + if !strings.Contains(w.Body.String(), "http://minio.example.com") { + t.Fatalf("Unexpected response body") + } + + }) + + /* + K8sObjects := []runtime.Object{ + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "secret", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + t.Run("With Authorization Header", func(t *testing.T) { + router := gin.New() + router.GET("/config", MakeConfigHandler(cfg)) + + req, _ := http.NewRequest("GET", "/config", nil) + req.Header.Set("Authorization", "Bearer some-token") + w := httptest.NewRecorder() + + // Mocking auth functions + monkey.Patch(auth.GetUIDFromContext, func(c *gin.Context) (string, error) { + return "somelonguserid@egi.eu", nil + }) + + monkey.Patch(auth.GetMultitenancyConfigFromContext, func(c *gin.Context) (*auth.MultitenancyConfig, error) { + return auth.NewMultitenancyConfig(kubeClientset, "somelonguserid@egi.eu"), nil + }) + + router.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Fatalf("expected status code 200, got %d", w.Code) + } + }) + */ + + t.Run("With Invalid Authorization Header", func(t *testing.T) { + router := gin.New() + router.GET("/config", MakeConfigHandler(cfg)) + + req, _ := http.NewRequest("GET", "/config", nil) + req.Header.Set("Authorization", "InvalidToken") + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Fatalf("expected status code 200, got %d", w.Code) + } + //assert.Contains(t, w.Body.String(), "http://minio.example.com") + }) +} diff --git a/pkg/handlers/health_test.go b/pkg/handlers/health_test.go new file mode 100644 index 00000000..ca405ad4 --- /dev/null +++ b/pkg/handlers/health_test.go @@ -0,0 +1,50 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package handlers + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/gin-gonic/gin" +) + +func TestHealthHandler(t *testing.T) { + // Set up the Gin router + router := gin.Default() + router.GET("/health", HealthHandler) + + // Create a request to send to the above route + req, _ := http.NewRequest("GET", "/health", nil) + + // Create a response recorder to record the response + w := httptest.NewRecorder() + + // Perform the request + router.ServeHTTP(w, req) + + // Check the status code is what we expect + if w.Code != http.StatusOK { + t.Errorf("expected status OK, got %v", w.Code) + } + + // Check the response body is what we expect + if w.Body.String() != "Ok" { + t.Errorf("expected body 'Ok', got %v", w.Body.String()) + } +} diff --git a/pkg/imagepuller/daemonset_test.go b/pkg/imagepuller/daemonset_test.go index 96f1f96f..fd14f209 100644 --- a/pkg/imagepuller/daemonset_test.go +++ b/pkg/imagepuller/daemonset_test.go @@ -36,7 +36,7 @@ func TestCreateDaemonset(t *testing.T) { } kubeClientset := fake.NewSimpleClientset() - // Patch the GetDataFromAPI function to return a mock result + // Patch the watchPods function to return a mock result monkey.Patch(watchPods, func(kubernetes.Interface, *types.Config) { }) From 4f3a9e7e53273d8a309d35528da46c4309a6c6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Tue, 22 Oct 2024 18:29:11 +0200 Subject: [PATCH 043/106] Updated documentation with Access Token support in /run and /job --- docs/api.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/api.md b/docs/api.md index 07afb9af..6bef9b69 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4,4 +4,8 @@ OSCAR exposes a secure REST API available at the Kubernetes master's node IP through an Ingress Controller. This API has been described following the [OpenAPI Specification](https://www.openapis.org/) and it is available below. +> ℹ️ +> +> The bearer token used to run a service can be either the OSCAR [service access token](invoking-sync.md#service-access-tokens) or the [user's Access Token](integration-egi.md#obtaining-an-access-token) if the OSCAR cluster is integrated with EGI Check-in. + !!swagger api.yaml!! From ff7049fca80884cd05c1e8ecb605d883f5b9942d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Tue, 22 Oct 2024 18:29:32 +0200 Subject: [PATCH 044/106] Clarified how to obtain an Access Token --- docs/images/oidc/egi-checkin-token-portal.png | Bin 0 -> 87620 bytes docs/integration-egi.md | 16 +++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 docs/images/oidc/egi-checkin-token-portal.png diff --git a/docs/images/oidc/egi-checkin-token-portal.png b/docs/images/oidc/egi-checkin-token-portal.png new file mode 100644 index 0000000000000000000000000000000000000000..41e0d08b2db4da6e5817c208c0add36e55938836 GIT binary patch literal 87620 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 + ``` + where `account-short-name` is the name of your account configuration. +* From the EGI Check-In Token Portal: [https://aai.egi.eu/token](https://aai.egi.eu/token) + +![egi-checkin-token-portal.png](images/oidc/egi-checkin-token-portal.png) From b5d6b3c241d2016e7aac180f03a455d96460ee17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Tue, 22 Oct 2024 18:36:18 +0200 Subject: [PATCH 045/106] Expanded description for asynchronous invocations And included list of supported storage providers. --- docs/invoking-async.md | 8 ++++---- docs/oscar-service.md | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/invoking-async.md b/docs/invoking-async.md index 60119924..b480cfb0 100644 --- a/docs/invoking-async.md +++ b/docs/invoking-async.md @@ -2,11 +2,11 @@ For event-driven file processing, OSCAR automatically manages the creation and [notification system](https://docs.min.io/minio/baremetal/monitoring/bucket-notifications/bucket-notifications.html#minio-bucket-notifications) -of MinIO buckets in order to allow the event-driven invocation of services -using asynchronous requests, generating a Kubernetes job for every file to be -processed. - +of MinIO buckets. This allow the event-driven invocation of services +using asynchronous requests for every file uploaded to the bucket, which generates a Kubernetes job for every file to be processed. ![oscar-async.png](images/oscar-async.png) +These jobs will be queued up in the Kubernetes scheduler and will be processed whenever there are resources available. If OSCAR cluster has been deployed as an elastic Kubernetes cluster (see [Deployment with IM](https://docs.oscar.grycap.net/deploy-im-dashboard/)), then new Virtual Machines will be provisioned (up to the maximum number of nodes defined) in the underlying Cloud platform and seamlessly integrated in the Kubernetes clusters to proceed with the execution of jobs. These nodes will be terminated as the worload is reduced. Notice that the output files can be stores in MinIO or in any other storage back-end supported by the [FaaS supervisor](oscar-service.md#faas-supervisor). +If you want to process a large number of data files, consider using [OSCAR Batch](https://github.com/grycap/oscar-batch), a tool designed to perform batch-based processing in OSCAR clusters. It includes a coordinator tool where the user provides a MinIO bucket containing files for processing. This service calculates the optimal number of parallel service invocations that can be accommodated within the cluster, according to its current status, and distributes the image processing workload accordingly among the service invocations. This is mainly intended to process large amounts of files, for example, historical data. diff --git a/docs/oscar-service.md b/docs/oscar-service.md index 1dd0c584..afcee018 100644 --- a/docs/oscar-service.md +++ b/docs/oscar-service.md @@ -15,7 +15,7 @@ is in charge of: -### Input/Output +### FaaS Supervisor [FaaS Supervisor](https://github.com/grycap/faas-supervisor), the component in charge of managing the input and output of services, allows JSON or base64 @@ -37,6 +37,12 @@ The output of synchronous invocations will depend on the application itself: This way users can adapt OSCAR's services to their own needs. +The FaaS Supervisor supports the following storage back-ends: +* [MinIO](https://min.io) +* [Amazon S3](https://aws.amazon.com/s3/) +* Webdav (and, therefore, [dCache](https://dcache.org)) +* Onedata (and, therefore, [EGI DataHub](https://www.egi.eu/service/datahub/)) + ### Container images Container images on asynchronous services use the tag `imagePullPolicy: Always`, which means that Kubernetes will check for the image digest on the image registry and download it if it is not present. From e3713bd3759c474581c3d43113efe58b2f19890f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Tue, 22 Oct 2024 18:36:52 +0200 Subject: [PATCH 046/106] Included considerations for invocations --- docs/invoking.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/invoking.md b/docs/invoking.md index 25a0664a..1c0c43b9 100644 --- a/docs/invoking.md +++ b/docs/invoking.md @@ -2,7 +2,16 @@ OSCAR services can be executed: - - [Synchronously](invoking-sync.md), so that the invocation to the service blocks the client until the response is obtained. Useful for short-lived service invocations. + - [Synchronously](invoking-sync.md), so that the invocation to the service blocks the client until the response is obtained. - [Asynchronously](invoking-async.md), typically in response to a file upload to MinIO or via the OSCAR API. - - As an [exposed service](exposed-services.md), where the application executed already provides its own API or user interface (e.g. a Jupyter Notebook) + - As an [exposed service](exposed-services.md), where the application executed already provides its own API or user interface (e.g. Jupyter Notebook) + + +After reading the different service execution types, take into account the following considerations to better decide the most appropriate execution type for your use case: + +* **Scalability**: Asynchronous invocations provide the best throughput when dealing with multiple concurrent data processing requests, since these are processed by independent jobs which are managed by the Kubernetes scheduler. A two-level elasticity approach is used (increase in the number of pods and increase in the number of Virtual Machines, if the OSCAR cluster was configured to be elastic). This is the recommended approach when each processing request exceeds the order of tens of seconds. + +* **Reduced Latency** Synchronous invocations are oriented for short-lived (< tens of seconds) bursty requests. A certain number of containers can be configured to be kept alive to avoid the performance penalty of spawning new ones while providing an upper bound limit (see [`min_scale` and `max_scale` in the FDL](fdl.md#synchronoussettings), at the expense of always consuming resources in the OSCAR cluster. If the processing file is in the order of several MBytes it may not fit in the payload of the HTTP request. + +* **Easy Access** For services that provide their own user interface or their own API, exposed services provide the ability to execute them in OSCAR and benefit for an auto-scaled configuration in case they are [stateless](https://en.wikipedia.org/wiki/Service_statelessness_principle). This way, users can directly access the service using its well-known interfaces by the users. From a1fc547baf96d1d72d5d874289147469da2dc946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Tue, 22 Oct 2024 18:37:14 +0200 Subject: [PATCH 047/106] Adjusted documentation to support for Access Tokens --- docs/invoking-sync.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/invoking-sync.md b/docs/invoking-sync.md index 56fcc000..9dd75329 100644 --- a/docs/invoking-sync.md +++ b/docs/invoking-sync.md @@ -83,8 +83,8 @@ base64 input.png | curl -X POST -H "Authorization: Bearer " \ ## Service access tokens -As detailed in the [API specification](api.md), invocation paths require the -service access token in the request header for authentication. Service access +As detailed in the [API specification](api.md), invocation paths require either the +service access token or the Access Token of the user when the cluster is integrated with EGI Check-in, in the request header for authentication (any of them is valid). Service access tokens are auto-generated in service creation and update, and MinIO eventing system is automatically configured to use them for event-driven file processing. Tokens can be obtained through the API, using the From e39edd9fc8d9c6da086c649fb55be22efcd37dc9 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Wed, 23 Oct 2024 09:08:02 +0200 Subject: [PATCH 048/106] Improve config tests --- pkg/handlers/config_test.go | 121 ++++++++++++++++++++++++++---------- 1 file changed, 87 insertions(+), 34 deletions(-) diff --git a/pkg/handlers/config_test.go b/pkg/handlers/config_test.go index a7526609..7a0b2b54 100644 --- a/pkg/handlers/config_test.go +++ b/pkg/handlers/config_test.go @@ -17,24 +17,54 @@ limitations under the License. package handlers import ( + "encoding/json" "net/http" "net/http/httptest" + "reflect" "strings" "testing" + "bou.ke/monkey" "github.com/gin-gonic/gin" "github.com/grycap/oscar/v3/pkg/types" + "github.com/grycap/oscar/v3/pkg/utils/auth" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + testclient "k8s.io/client-go/kubernetes/fake" ) +func createExpectedBody(access_key string, secret_key string, cfg *types.Config) map[string]interface{} { + return map[string]interface{}{ + "config": map[string]interface{}{ + "name": "", + "namespace": "", + "services_namespace": "", + "gpu_available": false, + "interLink_available": false, + "yunikorn_enable": false, + }, + "minio_provider": map[string]interface{}{ + "endpoint": cfg.MinIOProvider.Endpoint, + "verify": cfg.MinIOProvider.Verify, + "access_key": access_key, + "secret_key": secret_key, + "region": cfg.MinIOProvider.Region, + }, + } +} + func TestMakeConfigHandler(t *testing.T) { gin.SetMode(gin.TestMode) cfg := &types.Config{ // Initialize with necessary fields MinIOProvider: &types.MinIOProvider{ - Endpoint: "http://minio.example.com", - Verify: true, - Region: "us-east-1", + Endpoint: "http://minio.example.com", + Verify: true, + Region: "us-east-1", + AccessKey: "accessKey1", + SecretKey: "secretKey1", }, } @@ -55,54 +85,77 @@ func TestMakeConfigHandler(t *testing.T) { }) - /* - K8sObjects := []runtime.Object{ - &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "secret", - Namespace: "namespace", - }, + K8sObjects := []runtime.Object{ + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "somelonguserid", + Namespace: auth.ServicesNamespace, }, - } + Data: map[string][]byte{ + "accessKey": []byte("accessKey"), + "secretKey": []byte("secretKey"), + }, + }, + } - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - t.Run("With Authorization Header", func(t *testing.T) { - router := gin.New() - router.GET("/config", MakeConfigHandler(cfg)) + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + t.Run("With Bearer Authorization Header", func(t *testing.T) { + router := gin.New() + router.GET("/config", MakeConfigHandler(cfg)) - req, _ := http.NewRequest("GET", "/config", nil) - req.Header.Set("Authorization", "Bearer some-token") - w := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/config", nil) + req.Header.Set("Authorization", "Bearer some-token") + w := httptest.NewRecorder() - // Mocking auth functions - monkey.Patch(auth.GetUIDFromContext, func(c *gin.Context) (string, error) { - return "somelonguserid@egi.eu", nil - }) + // Mocking auth functions + monkey.Patch(auth.GetUIDFromContext, func(c *gin.Context) (string, error) { + return "somelonguserid@egi.eu", nil + }) - monkey.Patch(auth.GetMultitenancyConfigFromContext, func(c *gin.Context) (*auth.MultitenancyConfig, error) { - return auth.NewMultitenancyConfig(kubeClientset, "somelonguserid@egi.eu"), nil - }) + monkey.Patch(auth.GetMultitenancyConfigFromContext, func(c *gin.Context) (*auth.MultitenancyConfig, error) { + return auth.NewMultitenancyConfig(kubeClientset, "somelonguserid@egi.eu"), nil + }) - router.ServeHTTP(w, req) + router.ServeHTTP(w, req) - if w.Code != http.StatusOK { - t.Fatalf("expected status code 200, got %d", w.Code) - } - }) - */ + if w.Code != http.StatusOK { + t.Fatalf("expected status code 200, got %d", w.Code) + } - t.Run("With Invalid Authorization Header", func(t *testing.T) { + expected_body := createExpectedBody("accessKey", "secretKey", cfg) + + var responseBody map[string]interface{} + if err := json.Unmarshal(w.Body.Bytes(), &responseBody); err != nil { + t.Fatalf("Failed to parse response body: %v", err) + } + + if !reflect.DeepEqual(responseBody, expected_body) { + t.Fatalf("Unexpected response body: %s", w.Body.String()) + } + }) + + t.Run("With Token Authorization Header", func(t *testing.T) { router := gin.New() router.GET("/config", MakeConfigHandler(cfg)) req, _ := http.NewRequest("GET", "/config", nil) - req.Header.Set("Authorization", "InvalidToken") + req.Header.Set("Authorization", "SomeToken") w := httptest.NewRecorder() router.ServeHTTP(w, req) if w.Code != http.StatusOK { t.Fatalf("expected status code 200, got %d", w.Code) } - //assert.Contains(t, w.Body.String(), "http://minio.example.com") + + expected_body := createExpectedBody("accessKey1", "secretKey1", cfg) + + var responseBody map[string]interface{} + if err := json.Unmarshal(w.Body.Bytes(), &responseBody); err != nil { + t.Fatalf("Failed to parse response body: %v", err) + } + + if !reflect.DeepEqual(responseBody, expected_body) { + t.Fatalf("Unexpected response body: %s", w.Body.String()) + } }) } From 47fbddd1284ab399b03fb3f2193f58cda5e44ea7 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Wed, 23 Oct 2024 13:20:43 +0200 Subject: [PATCH 049/106] Add status tests --- pkg/handlers/status.go | 2 +- pkg/handlers/status_test.go | 132 ++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 pkg/handlers/status_test.go diff --git a/pkg/handlers/status.go b/pkg/handlers/status.go index 27eb8955..17fed02b 100644 --- a/pkg/handlers/status.go +++ b/pkg/handlers/status.go @@ -49,7 +49,7 @@ type NodeInfo struct { } // MakeStatusHandler Status handler for kubernetes deployment. -func MakeStatusHandler(kubeClientset kubernetes.Interface, metricsClientset *versioned.MetricsV1beta1Client) gin.HandlerFunc { +func MakeStatusHandler(kubeClientset kubernetes.Interface, metricsClientset versioned.MetricsV1beta1Interface) gin.HandlerFunc { return func(c *gin.Context) { // Get nodes list nodes, err := kubeClientset.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{}) diff --git a/pkg/handlers/status_test.go b/pkg/handlers/status_test.go new file mode 100644 index 00000000..d211583f --- /dev/null +++ b/pkg/handlers/status_test.go @@ -0,0 +1,132 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package handlers + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "reflect" + "testing" + + "github.com/gin-gonic/gin" + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes/fake" + k8stesting "k8s.io/client-go/testing" + metricsv1beta1api "k8s.io/metrics/pkg/apis/metrics/v1beta1" + metricsfake "k8s.io/metrics/pkg/client/clientset/versioned/fake" +) + +func TestMakeStatusHandler(t *testing.T) { + // Create a fake Kubernetes clientset + kubeClientset := fake.NewSimpleClientset( + &v1.NodeList{ + Items: []v1.Node{ + { + ObjectMeta: metav1.ObjectMeta{Name: "node1"}, + Status: v1.NodeStatus{ + Allocatable: v1.ResourceList{ + "cpu": *resource.NewMilliQuantity(2000, resource.DecimalSI), + "memory": *resource.NewQuantity(8*1024*1024*1024, resource.BinarySI), + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{Name: "node2"}, + Status: v1.NodeStatus{ + Allocatable: v1.ResourceList{ + "cpu": *resource.NewMilliQuantity(4000, resource.DecimalSI), + "memory": *resource.NewQuantity(16*1024*1024*1024, resource.BinarySI), + }, + }, + }, + }, + }, + ) + + // Create a fake Metrics clientset + metricsClientset := metricsfake.NewSimpleClientset() + // Add NodeMetrics objects to the fake clientset's store + metricsClientset.Fake.PrependReactor("list", "nodes", func(action k8stesting.Action) (handled bool, ret runtime.Object, err error) { + return true, &metricsv1beta1api.NodeMetricsList{ + Items: []metricsv1beta1api.NodeMetrics{ + { + ObjectMeta: metav1.ObjectMeta{Name: "node1"}, + Usage: v1.ResourceList{ + "cpu": *resource.NewMilliQuantity(1000, resource.DecimalSI), + "memory": *resource.NewQuantity(4*1024*1024*1024, resource.BinarySI), + }, + }, + { + ObjectMeta: metav1.ObjectMeta{Name: "node2"}, + Usage: v1.ResourceList{ + "cpu": *resource.NewMilliQuantity(2000, resource.DecimalSI), + "memory": *resource.NewQuantity(8*1024*1024*1024, resource.BinarySI), + }, + }, + }, + }, nil + }) + + // Create a new Gin router + router := gin.Default() + router.GET("/status", MakeStatusHandler(kubeClientset, metricsClientset.MetricsV1beta1())) + + // Create a new HTTP request + req, _ := http.NewRequest("GET", "/status", nil) + w := httptest.NewRecorder() + + // Perform the request + router.ServeHTTP(w, req) + + // Check the response + if w.Code != http.StatusOK { + t.Errorf("Expected status code %d, but got %d", http.StatusOK, w.Code) + } + + var jsonResponse map[string]interface{} + err := json.Unmarshal(w.Body.Bytes(), &jsonResponse) + if err != nil { + t.Fatalf("Failed to unmarshal response: %v", err) + } + + expectedResponse := map[string]interface{}{ + "numberNodes": 1.0, + "cpuFreeTotal": 2000.0, + "cpuMaxFree": 2000.0, + "memoryFreeTotal": 16.0 * 1024 * 1024 * 1024, + "memoryMaxFree": 8.0 * 1024 * 1024 * 1024, + "detail": []interface{}{ + map[string]interface{}{ + "nodeName": "node2", + "cpuCapacity": "4000", + "cpuUsage": "2000", + "cpuPercentage": "50.00", + "memoryCapacity": "17179869184", + "memoryUsage": "8589934592", + "memoryPercentage": "50.00", + }, + }, + } + + if !reflect.DeepEqual(jsonResponse, expectedResponse) { + t.Errorf("Expected response %v, but got %v", expectedResponse, jsonResponse) + } +} From c892326ee2eaa5099649f49ce88f0bb0b342008e Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Wed, 23 Oct 2024 13:43:50 +0200 Subject: [PATCH 050/106] Add delegate tests --- pkg/resourcemanager/delegate_test.go | 204 +++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 pkg/resourcemanager/delegate_test.go diff --git a/pkg/resourcemanager/delegate_test.go b/pkg/resourcemanager/delegate_test.go new file mode 100644 index 00000000..03ee2581 --- /dev/null +++ b/pkg/resourcemanager/delegate_test.go @@ -0,0 +1,204 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resourcemanager + +import ( + "bytes" + "encoding/json" + "log" + "net/http" + "net/http/httptest" + "testing" + + "github.com/grycap/oscar/v3/pkg/types" +) + +func TestDelegateJob(t *testing.T) { + logger := log.New(bytes.NewBuffer([]byte{}), "", log.LstdFlags) + event := "test-event" + + // Mock server to simulate the cluster endpoint + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == http.MethodPost && r.URL.Path == "/" { + w.WriteHeader(http.StatusOK) + return + } + if r.Method == http.MethodPost && r.URL.Path == "/job/test-service" { + w.WriteHeader(http.StatusCreated) + return + } + if r.Method == http.MethodGet && r.URL.Path == "/system/services/test-service" { + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(&types.Service{Token: "test-token"}) + return + } + if r.Method == http.MethodGet && r.URL.Path == "/system/status" { + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(&GeneralInfo{ + CPUMaxFree: 1000, + CPUFreeTotal: 2000, + }) + return + } + w.WriteHeader(http.StatusNotFound) + })) + defer server.Close() + + service := &types.Service{ + Name: "test-service", + ClusterID: "test-cluster", + CPU: "1", + Delegation: "static", + Replicas: []types.Replica{ + { + Type: "oscar", + ClusterID: "test-cluster", + ServiceName: "test-service", + Priority: 50, + Headers: map[string]string{"Content-Type": "application/json"}, + }, + }, + Clusters: map[string]types.Cluster{ + "test-cluster": { + Endpoint: server.URL, + AuthUser: "user", + AuthPassword: "password", + SSLVerify: false, + }, + }, + } + + t.Run("Replica type oscar", func(t *testing.T) { + err := DelegateJob(service, event, logger) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + }) + + t.Run("Replica type oscar with delegation random", func(t *testing.T) { + service.Delegation = "random" + err := DelegateJob(service, event, logger) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + }) + + t.Run("Replica type oscar with delegation load-based", func(t *testing.T) { + service.Delegation = "load-based" + err := DelegateJob(service, event, logger) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + }) + + t.Run("Replica type endpoint", func(t *testing.T) { + service.Replicas[0].Type = "endpoint" + service.Replicas[0].URL = server.URL + err := DelegateJob(service, event, logger) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + }) +} + +func TestWrapEvent(t *testing.T) { + providerID := "test-provider" + event := "test-event" + + expected := DelegatedEvent{ + StorageProviderID: providerID, + Event: event, + } + + result := WrapEvent(providerID, event) + + if result != expected { + t.Errorf("Expected %v, got %v", expected, result) + } +} + +func TestGetServiceToken(t *testing.T) { + replica := types.Replica{ + ServiceName: "test-service", + } + cluster := types.Cluster{ + Endpoint: "http://localhost:8080", + AuthUser: "user", + AuthPassword: "password", + SSLVerify: false, + } + + // Mock server to simulate the cluster endpoint + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == http.MethodGet && r.URL.Path == "/system/services/test-service" { + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(&types.Service{Token: "test-token"}) + return + } + w.WriteHeader(http.StatusNotFound) + })) + defer server.Close() + + // Update the cluster endpoint to the mock server URL + cluster.Endpoint = server.URL + + token, err := getServiceToken(replica, cluster) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + expectedToken := "test-token" + if token != expectedToken { + t.Errorf("Expected %v, got %v", expectedToken, token) + } +} + +func TestUpdateServiceToken(t *testing.T) { + replica := types.Replica{ + ServiceName: "test-service", + } + cluster := types.Cluster{ + Endpoint: "http://localhost:8080", + AuthUser: "user", + AuthPassword: "password", + SSLVerify: false, + } + + // Mock server to simulate the cluster endpoint + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == http.MethodGet && r.URL.Path == "/system/services/test-service" { + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(&types.Service{Token: "test-token"}) + return + } + w.WriteHeader(http.StatusNotFound) + })) + defer server.Close() + + // Update the cluster endpoint to the mock server URL + cluster.Endpoint = server.URL + + token, err := updateServiceToken(replica, cluster) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + expectedToken := "test-token" + if token != expectedToken { + t.Errorf("Expected %v, got %v", expectedToken, token) + } +} From 421dd73699573c7c292335ad0ffbe3beabf38838 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Wed, 23 Oct 2024 13:56:25 +0200 Subject: [PATCH 051/106] Add rescheduler tests --- pkg/resourcemanager/rescheduler_test.go | 130 ++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 pkg/resourcemanager/rescheduler_test.go diff --git a/pkg/resourcemanager/rescheduler_test.go b/pkg/resourcemanager/rescheduler_test.go new file mode 100644 index 00000000..43e0f7bb --- /dev/null +++ b/pkg/resourcemanager/rescheduler_test.go @@ -0,0 +1,130 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resourcemanager + +import ( + "testing" + "time" + + "github.com/grycap/oscar/v3/pkg/backends" + "github.com/grycap/oscar/v3/pkg/types" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestGetReSchedulablePods(t *testing.T) { + // Define test namespace + namespace := "test-namespace" + + // Create test pods + pods := &v1.PodList{ + Items: []v1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod1", + Namespace: namespace, + Labels: map[string]string{ + types.ServiceLabel: "service1", + types.ReSchedulerLabelKey: "10", + }, + CreationTimestamp: metav1.Time{Time: time.Now().Add(-15 * time.Second)}, + }, + Status: v1.PodStatus{ + Phase: v1.PodPending, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod2", + Namespace: namespace, + Labels: map[string]string{ + types.ServiceLabel: "service2", + types.ReSchedulerLabelKey: "20", + }, + CreationTimestamp: metav1.Time{Time: time.Now().Add(-5 * time.Second)}, + }, + Status: v1.PodStatus{ + Phase: v1.PodPending, + }, + }, + }, + } + + // Create a fake Kubernetes client + kubeClientset := fake.NewSimpleClientset(pods) + + // Call the function to test + reSchedulablePods, err := getReSchedulablePods(kubeClientset, namespace) + if err != nil { + t.Fatalf("error getting reschedulable pods: %v", err) + } + + // Check the results + if len(reSchedulablePods) != 1 { + t.Errorf("expected 1 reschedulable pod, got %d", len(reSchedulablePods)) + } + + if reSchedulablePods[0].Name != "pod1" { + t.Errorf("expected pod1 to be reschedulable, got %s", reSchedulablePods[0].Name) + } +} + +func TestGetReScheduleInfos(t *testing.T) { + // Define test namespace + namespace := "test-namespace" + + // Create test pods + pods := []v1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod1", + Namespace: namespace, + Labels: map[string]string{ + types.ServiceLabel: "service1", + types.ReSchedulerLabelKey: "10", + }, + CreationTimestamp: metav1.Time{Time: time.Now().Add(-15 * time.Second)}, + }, + Status: v1.PodStatus{ + Phase: v1.PodPending, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod2", + Namespace: namespace, + Labels: map[string]string{ + types.ServiceLabel: "service2", + types.ReSchedulerLabelKey: "20", + }, + CreationTimestamp: metav1.Time{Time: time.Now().Add(-5 * time.Second)}, + }, + Status: v1.PodStatus{ + Phase: v1.PodPending, + }, + }, + } + + back := backends.MakeFakeBackend() + // Call the function to test + reScheduleInfos := getReScheduleInfos(pods, back) + if reScheduleInfos == nil { + t.Fatalf("error getting reschedule infos") + } + +} From 9fcd4d62625cfd5e76b18b7ba68f137fd99d6893 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 24 Oct 2024 08:10:30 +0200 Subject: [PATCH 052/106] Add replica tests --- pkg/types/replica_test.go | 69 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 pkg/types/replica_test.go diff --git a/pkg/types/replica_test.go b/pkg/types/replica_test.go new file mode 100644 index 00000000..efa5d896 --- /dev/null +++ b/pkg/types/replica_test.go @@ -0,0 +1,69 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import ( + "sort" + "testing" +) + +func TestReplicaList_Len(t *testing.T) { + replicas := ReplicaList{ + {Type: "oscar", Priority: 1}, + {Type: "endpoint", Priority: 2}, + } + expected := 2 + if replicas.Len() != expected { + t.Errorf("expected %d, got %d", expected, len(replicas)) + } +} + +func TestReplicaList_Swap(t *testing.T) { + replicas := ReplicaList{ + {Type: "oscar", Priority: 1}, + {Type: "endpoint", Priority: 2}, + } + replicas.Swap(0, 1) + if replicas[0].Priority != 2 || replicas[1].Priority != 1 { + t.Errorf("Swap did not work as expected") + } +} + +func TestReplicaList_Less(t *testing.T) { + replicas := ReplicaList{ + {Type: "oscar", Priority: 1}, + {Type: "endpoint", Priority: 2}, + } + if !replicas.Less(0, 1) { + t.Errorf("expected replicas[0] to be less than replicas[1]") + } + if replicas.Less(1, 0) { + t.Errorf("expected replicas[1] to not be less than replicas[0]") + } +} + +func TestReplicaList_Sort(t *testing.T) { + replicas := ReplicaList{ + {Type: "endpoint", Priority: 2}, + {Type: "oscar", Priority: 1}, + {Type: "oscar", Priority: 0}, + } + sort.Sort(replicas) + if replicas[0].Priority != 0 || replicas[1].Priority != 1 || replicas[2].Priority != 2 { + t.Errorf("Sort did not work as expected") + } +} From 579a717093e58f5e61a281bd45a522f40553a740 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 24 Oct 2024 09:28:57 +0200 Subject: [PATCH 053/106] Add openfaas tests --- pkg/backends/openfaas.go | 2 +- pkg/backends/openfaas_test.go | 326 ++++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+), 1 deletion(-) create mode 100644 pkg/backends/openfaas_test.go diff --git a/pkg/backends/openfaas.go b/pkg/backends/openfaas.go index d03db44c..5743e21a 100644 --- a/pkg/backends/openfaas.go +++ b/pkg/backends/openfaas.go @@ -43,7 +43,7 @@ var errOpenfaasOperator = errors.New("the OpenFaaS Operator is not creating the // OpenfaasBackend struct to represent an Openfaas client type OpenfaasBackend struct { kubeClientset kubernetes.Interface - ofClientset *ofclientset.Clientset + ofClientset ofclientset.Interface namespace string gatewayEndpoint string scaler *utils.OpenfaasScaler diff --git a/pkg/backends/openfaas_test.go b/pkg/backends/openfaas_test.go new file mode 100644 index 00000000..4228a6b6 --- /dev/null +++ b/pkg/backends/openfaas_test.go @@ -0,0 +1,326 @@ +package backends + +import ( + "testing" + "time" + + "github.com/grycap/oscar/v3/pkg/types" + ofv1 "github.com/openfaas/faas-netes/pkg/apis/openfaas/v1" + ofclientset "github.com/openfaas/faas-netes/pkg/client/clientset/versioned/fake" + appsv1 "k8s.io/api/apps/v1" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/watch" + + "k8s.io/client-go/kubernetes/fake" + "k8s.io/client-go/rest" + k8stesting "k8s.io/client-go/testing" +) + +func TestMakeOpenfaasBackend(t *testing.T) { + kubeClientset := fake.NewSimpleClientset() + kubeConfig := &rest.Config{} + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + ofBackend := MakeOpenfaasBackend(kubeClientset, kubeConfig, cfg) + + if ofBackend.namespace != "default" { + t.Errorf("Expected namespace to be 'default', got '%s'", ofBackend.namespace) + } + if ofBackend.gatewayEndpoint != "gateway.openfaas:8080" { + t.Errorf("Expected gatewayEndpoint to be 'gateway.openfaas:8080', got '%s'", ofBackend.gatewayEndpoint) + } +} + +func TestGetInfo(t *testing.T) { + kubeClientset := fake.NewSimpleClientset() + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + ofClientset := ofclientset.NewSimpleClientset() + ofBackend := &OpenfaasBackend{ + kubeClientset: kubeClientset, + ofClientset: ofClientset, + namespace: cfg.ServicesNamespace, + config: cfg, + } + + info := ofBackend.GetInfo() + if info.Name != "OpenFaaS" { + t.Errorf("Expected Name to be 'OpenFaaS', got '%s'", info.Name) + } +} + +func TestCreateService(t *testing.T) { + ofClientset := ofclientset.NewSimpleClientset() + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + deployment := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: cfg.ServicesNamespace, + }, + } + kubeClientset := fake.NewSimpleClientset(deployment) + + ofBackend := &OpenfaasBackend{ + kubeClientset: kubeClientset, + ofClientset: ofClientset, + namespace: cfg.ServicesNamespace, + config: cfg, + } + + service := types.Service{ + Name: "test-service", + Image: "test-image", + Labels: map[string]string{ + "test": "label", + }, + } + + // Create a fake watcher + fakeWatcher := watch.NewFake() + + // Set up a reactor to intercept the Watch action and return the fake watcher + kubeClientset.PrependWatchReactor("deployments", func(action k8stesting.Action) (handled bool, ret watch.Interface, err error) { + return true, fakeWatcher, nil + }) + + // Run watcher in a goroutine + go func() { + // Simulate the creation of the deployment by triggering an event on the fake watcher + time.Sleep(1 * time.Second) // Ensure the CreateService method is waiting on the watcher + fakeWatcher.Add(&appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: service.Name, + Namespace: cfg.ServicesNamespace, + }, + }) + + // Allow some time for the CreateService method to process the event + time.Sleep(1 * time.Second) + }() + + err := ofBackend.CreateService(service) + if err != nil { + t.Errorf("Expected no error, got '%v'", err) + } + + actions := ofClientset.Actions() + if len(actions) != 1 { + t.Errorf("Expected 1 action, got %d", len(actions)) + } + if actions[0].GetResource().Resource != "functions" || actions[0].GetVerb() != "create" { + t.Errorf("Expected action to be 'create functions', got '%s %s'", actions[0].GetVerb(), actions[0].GetResource().Resource) + } +} + +func TestReadService(t *testing.T) { + ofClientset := ofclientset.NewSimpleClientset() + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + cm := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: cfg.ServicesNamespace, + }, + Data: map[string]string{ + types.FDLFileName: `{"name": "test-service"}`, + types.ScriptFileName: "script.sh", + }, + } + deployment := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: cfg.ServicesNamespace, + }, + } + kubeClientset := fake.NewSimpleClientset(cm, deployment) + + ofBackend := &OpenfaasBackend{ + kubeClientset: kubeClientset, + ofClientset: ofClientset, + namespace: cfg.ServicesNamespace, + config: cfg, + } + + service, err := ofBackend.ReadService("test-service") + if err != nil { + t.Errorf("Expected no error, got '%v'", err) + } + if service.Name != "test-service" { + t.Errorf("Expected service name to be 'test-service', got '%s'", service.Name) + } +} + +func TestDeleteService(t *testing.T) { + + kubeClientset := fake.NewSimpleClientset() + offunction := &ofv1.Function{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: "default", + }, + Spec: ofv1.FunctionSpec{ + Image: "test-image", + }, + } + ofClientset := ofclientset.NewSimpleClientset(offunction) + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + ofBackend := &OpenfaasBackend{ + kubeClientset: kubeClientset, + ofClientset: ofClientset, + namespace: cfg.ServicesNamespace, + config: cfg, + } + + service := types.Service{ + Name: "test-service", + Image: "test-image", + } + + // Delete the service + err := ofBackend.DeleteService(service) + if err != nil { + t.Errorf("Expected no error, got '%v'", err) + } + + actions := ofClientset.Actions() + if len(actions) != 1 { + t.Errorf("Expected 1 action, got %d", len(actions)) + } + if actions[0].GetResource().Resource != "functions" || actions[0].GetVerb() != "delete" { + t.Errorf("Expected action to be 'delete functions', got '%s %s'", actions[0].GetVerb(), actions[0].GetResource().Resource) + } +} + +func TestUpdateService(t *testing.T) { + ofClientset := ofclientset.NewSimpleClientset() + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + oldCm := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: cfg.ServicesNamespace, + }, + Data: map[string]string{ + types.FDLFileName: `{"name": "test-service"}`, + types.ScriptFileName: "script.sh", + }, + } + deployment := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: cfg.ServicesNamespace, + }, + } + kubeClientset := fake.NewSimpleClientset(oldCm, deployment) + + ofBackend := &OpenfaasBackend{ + kubeClientset: kubeClientset, + ofClientset: ofClientset, + namespace: cfg.ServicesNamespace, + config: cfg, + } + + service := types.Service{ + Name: "test-service", + Image: "test-image", + Labels: map[string]string{ + "test": "label", + }, + } + + err := ofBackend.UpdateService(service) + if err != nil { + t.Errorf("Expected no error, got '%v'", err) + } + + actions := kubeClientset.Actions() + if len(actions) != 4 { + t.Errorf("Expected 4 actions, got %d", len(actions)) + } + if actions[0].GetResource().Resource != "configmaps" || actions[0].GetVerb() != "get" { + t.Errorf("Expected action to be 'get configmaps', got '%s %s'", actions[0].GetVerb(), actions[0].GetResource().Resource) + } + if actions[1].GetResource().Resource != "configmaps" || actions[1].GetVerb() != "update" { + t.Errorf("Expected action to be 'update configmaps', got '%s %s'", actions[2].GetVerb(), actions[2].GetResource().Resource) + } + if actions[2].GetResource().Resource != "deployments" || actions[2].GetVerb() != "get" { + t.Errorf("Expected action to be 'get deployments', got '%s %s'", actions[2].GetVerb(), actions[2].GetResource().Resource) + } + if actions[3].GetResource().Resource != "deployments" || actions[3].GetVerb() != "update" { + t.Errorf("Expected action to be 'update deployments', got '%s %s'", actions[3].GetVerb(), actions[3].GetResource().Resource) + } +} + +func TestListServices(t *testing.T) { + cfg := &types.Config{ + ServicesNamespace: "default", + OpenfaasNamespace: "openfaas", + OpenfaasPort: 8080, + } + + ofClientset := ofclientset.NewSimpleClientset() + + cml := &v1.ConfigMapList{ + Items: []v1.ConfigMap{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "test-service", + Namespace: cfg.ServicesNamespace, + Labels: map[string]string{ + "oscar_service": "true", + }, + }, + Data: map[string]string{ + types.FDLFileName: `{"name": "test-service"}`, + types.ScriptFileName: "script.sh", + }, + }, + }, + } + kubeClientset := fake.NewSimpleClientset(cml) + + ofBackend := &OpenfaasBackend{ + kubeClientset: kubeClientset, + ofClientset: ofClientset, + namespace: cfg.ServicesNamespace, + config: cfg, + } + + services, err := ofBackend.ListServices() + if err != nil { + t.Errorf("Expected no error, got '%v'", err) + } + if len(services) != 1 { + t.Errorf("Expected 1 service, got %d", len(services)) + } + if services[0].Name != "test-service" { + t.Errorf("Expected service name to be 'test-service', got '%s'", services[0].Name) + } +} From 1e7ff064e132ca4eb8d76295fca405d6b5199147 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 24 Oct 2024 12:11:50 +0200 Subject: [PATCH 054/106] Add tests --- pkg/backends/serverlessbackend_test.go | 65 +++++++++ pkg/utils/of_scaler_test.go | 193 +++++++++++++++++++++++++ pkg/utils/token_test.go | 49 +++++++ 3 files changed, 307 insertions(+) create mode 100644 pkg/backends/serverlessbackend_test.go create mode 100644 pkg/utils/of_scaler_test.go create mode 100644 pkg/utils/token_test.go diff --git a/pkg/backends/serverlessbackend_test.go b/pkg/backends/serverlessbackend_test.go new file mode 100644 index 00000000..01af08c1 --- /dev/null +++ b/pkg/backends/serverlessbackend_test.go @@ -0,0 +1,65 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package backends + +import ( + "fmt" + "testing" + + "github.com/grycap/oscar/v3/pkg/types" + "k8s.io/client-go/kubernetes/fake" + "k8s.io/client-go/rest" +) + +func TestMakeServerlessBackend(t *testing.T) { + kubeClientset := fake.NewSimpleClientset() + kubeConfig := &rest.Config{} + + tests := []struct { + name string + serverlessBackend string + expectedBackendType string + }{ + { + name: "OpenFaaS Backend", + serverlessBackend: "openfaas", + expectedBackendType: "*backends.OpenfaasBackend", + }, + { + name: "Knative Backend", + serverlessBackend: "knative", + expectedBackendType: "*backends.KnativeBackend", + }, + { + name: "Default Kube Backend", + serverlessBackend: "unknown", + expectedBackendType: "*backends.KubeBackend", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := &types.Config{ + ServerlessBackend: tt.serverlessBackend, + } + backend := MakeServerlessBackend(kubeClientset, kubeConfig, cfg) + if backendType := fmt.Sprintf("%T", backend); backendType != tt.expectedBackendType { + t.Errorf("expected %s, got %s", tt.expectedBackendType, backendType) + } + }) + } +} diff --git a/pkg/utils/of_scaler_test.go b/pkg/utils/of_scaler_test.go new file mode 100644 index 00000000..20031384 --- /dev/null +++ b/pkg/utils/of_scaler_test.go @@ -0,0 +1,193 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package utils + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/grycap/oscar/v3/pkg/types" + "github.com/prometheus/client_golang/api" + v1 "github.com/prometheus/client_golang/api/prometheus/v1" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestNewOFScaler(t *testing.T) { + kubeClientset := fake.NewSimpleClientset() + cfg := &types.Config{ + OpenfaasNamespace: "openfaas", + ServicesNamespace: "default", + OpenfaasPort: 8080, + OpenfaasBasicAuthSecret: "basic-auth", + OpenfaasPrometheusPort: 9090, + OpenfaasScalerInactivityDuration: "5m", + OpenfaasScalerInterval: "1m", + } + + scaler := NewOFScaler(kubeClientset, cfg) + + if scaler.openfaasNamespace != "openfaas" { + t.Errorf("Expected openfaasNamespace to be 'openfaas', got %s", scaler.openfaasNamespace) + } + if scaler.namespace != "default" { + t.Errorf("Expected namespace to be 'default', got %s", scaler.namespace) + } + if scaler.gatewayEndpoint != "http://gateway.openfaas:8080" { + t.Errorf("Expected gatewayEndpoint to be 'http://gateway.openfaas:8080', got %s", scaler.gatewayEndpoint) + } + if scaler.prometheusEndpoint != "http://prometheus.openfaas:9090" { + t.Errorf("Expected prometheusEndpoint to be 'http://prometheus.openfaas:9090', got %s", scaler.prometheusEndpoint) + } +} + +func TestGetScalableFunctions(t *testing.T) { + // Create a deployment with the label "com.openfaas.scale.zero" set to "true" + deployment := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-function", + Namespace: "default", + }, + Spec: appsv1.DeploymentSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "com.openfaas.scale.zero": "true", + }, + }, + }, + }, + Status: appsv1.DeploymentStatus{ + Replicas: 1, + }, + } + + kubeClientset := fake.NewSimpleClientset(deployment) + scaler := &OpenfaasScaler{ + kubeClientset: kubeClientset, + namespace: "default", + } + + functions, err := scaler.getScalableFunctions() + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + + if len(functions) != 1 { + t.Errorf("Expected 1 function, got %d", len(functions)) + } + if functions[0] != "test-function" { + t.Errorf("Expected function name to be 'test-function', got %s", functions[0]) + } +} + +func TestScaleToZero(t *testing.T) { + kubeClientset := fake.NewSimpleClientset() + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + fmt.Println(hreq.URL.Path) + })) + + scaler := &OpenfaasScaler{ + kubeClientset: kubeClientset, + gatewayEndpoint: server.URL, + } + + err := scaler.scaleToZero("test-function", "user", "pass", server.Client()) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } +} + +func TestIsIdle(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + fmt.Println(hreq.URL.Path) + if hreq.URL.Path == "/api/v1/query" { + rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"0"]}]},"error":null}`)) + } + })) + + prometheusClient, _ := api.NewClient(api.Config{ + Address: server.URL, + }) + prometheusAPIClient := v1.NewAPI(prometheusClient) + + idle := isIdle("test-function", "default", "5m", prometheusAPIClient) + if !idle { + t.Errorf("Expected function to be idle") + } +} + +func TestStart(t *testing.T) { + secret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-auth", + Namespace: "openfaas", + }, + Data: map[string][]byte{ + "basic-auth-user": []byte("user"), + "basic-auth-password": []byte("pass"), + }, + } + deployment := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-function", + Namespace: "default", + }, + Spec: appsv1.DeploymentSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "com.openfaas.scale.zero": "true", + }, + }, + }, + }, + Status: appsv1.DeploymentStatus{ + Replicas: 1, + }, + } + kubeClientset := fake.NewSimpleClientset(secret, deployment) + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + fmt.Println(hreq.URL.Path) + if hreq.URL.Path == "/api/v1/query" { + rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"0"]}]},"error":null}`)) + } + })) + + cfg := &types.Config{ + OpenfaasNamespace: "openfaas", + ServicesNamespace: "default", + OpenfaasPort: 8080, + OpenfaasBasicAuthSecret: "basic-auth", + OpenfaasPrometheusPort: 9090, + OpenfaasScalerInactivityDuration: "5m", + OpenfaasScalerInterval: "0.1s", + } + + scaler := NewOFScaler(kubeClientset, cfg) + scaler.gatewayEndpoint = server.URL + scaler.prometheusEndpoint = server.URL + + go func() { + scaler.Start() + }() + time.Sleep(2 * time.Second) +} diff --git a/pkg/utils/token_test.go b/pkg/utils/token_test.go new file mode 100644 index 00000000..c2b25867 --- /dev/null +++ b/pkg/utils/token_test.go @@ -0,0 +1,49 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "encoding/hex" + "testing" +) + +// TestGenerateTokenLength checks if the generated token has the correct length +func TestGenerateTokenLength(t *testing.T) { + token := GenerateToken() + expectedLength := 64 // 32 bytes * 2 (hex encoding) + if len(token) != expectedLength { + t.Errorf("Expected token length of %d, but got %d", expectedLength, len(token)) + } +} + +// TestGenerateTokenUniqueness checks if multiple generated tokens are unique +func TestGenerateTokenUniqueness(t *testing.T) { + token1 := GenerateToken() + token2 := GenerateToken() + if token1 == token2 { + t.Error("Expected tokens to be unique, but they are the same") + } +} + +// TestGenerateTokenHexEncoding checks if the generated token is a valid hex string +func TestGenerateTokenHexEncoding(t *testing.T) { + token := GenerateToken() + _, err := hex.DecodeString(token) + if err != nil { + t.Errorf("Expected a valid hex string, but got an error: %v", err) + } +} From 4a6432c44720c6138d08343c125f2a58e3a82c42 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 24 Oct 2024 12:44:45 +0200 Subject: [PATCH 055/106] Add tests --- pkg/resourcemanager/rescheduler_test.go | 63 +++++++++++++++++++++++++ pkg/utils/of_scaler_test.go | 19 +++++--- 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/pkg/resourcemanager/rescheduler_test.go b/pkg/resourcemanager/rescheduler_test.go index 43e0f7bb..6f3939b7 100644 --- a/pkg/resourcemanager/rescheduler_test.go +++ b/pkg/resourcemanager/rescheduler_test.go @@ -17,11 +17,15 @@ limitations under the License. package resourcemanager import ( + "bytes" + "log" "testing" "time" + "bou.ke/monkey" "github.com/grycap/oscar/v3/pkg/backends" "github.com/grycap/oscar/v3/pkg/types" + jobv1 "k8s.io/api/batch/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" @@ -128,3 +132,62 @@ func TestGetReScheduleInfos(t *testing.T) { } } + +func TestStartReScheduler(t *testing.T) { + // Define test namespace + namespace := "test-namespace" + + // Create test pods + pods := &v1.PodList{ + Items: []v1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "pod1", + Namespace: namespace, + Labels: map[string]string{ + types.ServiceLabel: "service1", + types.ReSchedulerLabelKey: "10", + "job-name": "job1", + }, + CreationTimestamp: metav1.Time{Time: time.Now().Add(-15 * time.Second)}, + }, + Status: v1.PodStatus{ + Phase: v1.PodPending, + }, + }, + }, + } + jobs := &jobv1.JobList{ + Items: []jobv1.Job{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "job1", + Namespace: namespace, + }, + }, + }, + } + + // Create a fake Kubernetes client + kubeClientset := fake.NewSimpleClientset(pods, jobs) + back := backends.MakeFakeBackend() + cfg := &types.Config{ + ReSchedulerInterval: 5, + ServicesNamespace: namespace, + } + + // Mock the Delegate function using monkey patching + monkey.Patch(DelegateJob, func(service *types.Service, event string, logger *log.Logger) error { + return nil + }) + var buf bytes.Buffer + reSchedulerLogger = log.New(&buf, "[RE-SCHEDULER] ", log.Flags()) + // Call the function to test + go StartReScheduler(cfg, back, kubeClientset) + time.Sleep(2 * time.Second) + + defer monkey.Unpatch(DelegateJob) + if buf.String() != "" { + t.Fatalf("error starting rescheduler: %v", buf.String()) + } +} diff --git a/pkg/utils/of_scaler_test.go b/pkg/utils/of_scaler_test.go index 20031384..a153dfec 100644 --- a/pkg/utils/of_scaler_test.go +++ b/pkg/utils/of_scaler_test.go @@ -16,7 +16,9 @@ limitations under the License. package utils import ( + "bytes" "fmt" + "log" "net/http" "net/http/httptest" "testing" @@ -168,7 +170,7 @@ func TestStart(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { fmt.Println(hreq.URL.Path) if hreq.URL.Path == "/api/v1/query" { - rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"0"]}]},"error":null}`)) + rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"1"]}]},"error":null}`)) } })) @@ -179,15 +181,20 @@ func TestStart(t *testing.T) { OpenfaasBasicAuthSecret: "basic-auth", OpenfaasPrometheusPort: 9090, OpenfaasScalerInactivityDuration: "5m", - OpenfaasScalerInterval: "0.1s", + OpenfaasScalerInterval: "0.5s", } scaler := NewOFScaler(kubeClientset, cfg) scaler.gatewayEndpoint = server.URL scaler.prometheusEndpoint = server.URL - go func() { - scaler.Start() - }() - time.Sleep(2 * time.Second) + var buf bytes.Buffer + scalerLogger = log.New(&buf, "[OF-SCALER] ", log.Flags()) + + go scaler.Start() + time.Sleep(1 * time.Second) + + if buf.String() != "" { + t.Errorf("Unexpected log output: %s", buf.String()) + } } From 4892d624b817d4c518dfa0d867a226c8172b0b83 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 24 Oct 2024 12:58:27 +0200 Subject: [PATCH 056/106] Add tests --- pkg/handlers/update_test.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/handlers/update_test.go b/pkg/handlers/update_test.go index b369bfe6..636caa9a 100644 --- a/pkg/handlers/update_test.go +++ b/pkg/handlers/update_test.go @@ -43,7 +43,8 @@ func TestMakeUpdateHandler(t *testing.T) { AccessKey: "ak", SecretKey: "sk"}}, }, - AllowedUsers: []string{"user1"}} + Owner: "somelonguid@egi.eu", + AllowedUsers: []string{"somelonguid1@egi.eu"}} back.Service = svc // and set the MinIO endpoint to the fake server @@ -57,6 +58,10 @@ func TestMakeUpdateHandler(t *testing.T) { } r := gin.Default() + r.Use(func(c *gin.Context) { + c.Set("uidOrigin", "somelonguid@egi.eu") + c.Next() + }) r.PUT("/system/services", MakeUpdateHandler(&cfg, back)) w := httptest.NewRecorder() @@ -95,6 +100,7 @@ func TestMakeUpdateHandler(t *testing.T) { } `) req, _ := http.NewRequest("PUT", "/system/services", body) + req.Header.Set("Authorization", "Bearer token") r.ServeHTTP(w, req) // Close the fake MinIO server From 9cf73cbd17c83a1bf448af2844b7c1d990ea2351 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 24 Oct 2024 13:10:39 +0200 Subject: [PATCH 057/106] Add tests --- pkg/handlers/config_test.go | 3 +++ pkg/handlers/create_test.go | 2 -- pkg/imagepuller/daemonset_test.go | 2 ++ pkg/utils/minio_test.go | 2 -- pkg/utils/of_scaler_test.go | 4 ---- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/pkg/handlers/config_test.go b/pkg/handlers/config_test.go index 7a0b2b54..388c3c1a 100644 --- a/pkg/handlers/config_test.go +++ b/pkg/handlers/config_test.go @@ -132,6 +132,9 @@ func TestMakeConfigHandler(t *testing.T) { if !reflect.DeepEqual(responseBody, expected_body) { t.Fatalf("Unexpected response body: %s", w.Body.String()) } + + defer monkey.Unpatch(auth.GetUIDFromContext) + defer monkey.Unpatch(auth.GetMultitenancyConfigFromContext) }) t.Run("With Token Authorization Header", func(t *testing.T) { diff --git a/pkg/handlers/create_test.go b/pkg/handlers/create_test.go index 2c5fc6f8..335ab2d3 100644 --- a/pkg/handlers/create_test.go +++ b/pkg/handlers/create_test.go @@ -42,8 +42,6 @@ func TestMakeCreateHandler(t *testing.T) { t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) } - fmt.Println(hreq.URL.Path) - if hreq.URL.Path == "/minio/admin/v3/info" { rw.WriteHeader(http.StatusOK) rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) diff --git a/pkg/imagepuller/daemonset_test.go b/pkg/imagepuller/daemonset_test.go index fd14f209..1b29e709 100644 --- a/pkg/imagepuller/daemonset_test.go +++ b/pkg/imagepuller/daemonset_test.go @@ -69,4 +69,6 @@ func TestCreateDaemonset(t *testing.T) { if daemonset.Spec.Template.Spec.Containers[0].Image != service.Image { t.Errorf("expected container image to be '%s', got %s", service.Image, daemonset.Spec.Template.Spec.Containers[0].Image) } + + defer monkey.Unpatch(watchPods) } diff --git a/pkg/utils/minio_test.go b/pkg/utils/minio_test.go index 2741df50..8121c579 100644 --- a/pkg/utils/minio_test.go +++ b/pkg/utils/minio_test.go @@ -17,7 +17,6 @@ limitations under the License. package utils import ( - "fmt" "net/http" "net/http/httptest" "strings" @@ -29,7 +28,6 @@ import ( func createMinIOConfig() (types.Config, *httptest.Server) { // Create a fake MinIO server server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - fmt.Println(hreq.URL.Path) if !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { rw.WriteHeader(http.StatusNotFound) } diff --git a/pkg/utils/of_scaler_test.go b/pkg/utils/of_scaler_test.go index a153dfec..1a35370b 100644 --- a/pkg/utils/of_scaler_test.go +++ b/pkg/utils/of_scaler_test.go @@ -17,7 +17,6 @@ package utils import ( "bytes" - "fmt" "log" "net/http" "net/http/httptest" @@ -104,7 +103,6 @@ func TestGetScalableFunctions(t *testing.T) { func TestScaleToZero(t *testing.T) { kubeClientset := fake.NewSimpleClientset() server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - fmt.Println(hreq.URL.Path) })) scaler := &OpenfaasScaler{ @@ -120,7 +118,6 @@ func TestScaleToZero(t *testing.T) { func TestIsIdle(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - fmt.Println(hreq.URL.Path) if hreq.URL.Path == "/api/v1/query" { rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"0"]}]},"error":null}`)) } @@ -168,7 +165,6 @@ func TestStart(t *testing.T) { } kubeClientset := fake.NewSimpleClientset(secret, deployment) server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - fmt.Println(hreq.URL.Path) if hreq.URL.Path == "/api/v1/query" { rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"1"]}]},"error":null}`)) } From 9434fbf4b4a73fbae9b37e64a09381be6abe2452 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 25 Oct 2024 08:15:59 +0200 Subject: [PATCH 058/106] Fix style issues --- .github/ISSUE_TEMPLATE/bug_report.md | 3 ++- CODE_OF_CONDUCT.md | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 29046a7c..7dc82a30 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -23,4 +23,5 @@ about: Create a report to help us improve ### Possible Solution -Any thoughts as to potential solutions or ideas to go about finding one. Please include links to any research. +Any thoughts as to potential solutions or ideas to go about finding one. +Please include links to any research. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 6ae866a2..c3c62a0b 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,19 +14,22 @@ orientation. Examples of behavior that contributes to creating a positive environment include: -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting ## Our Responsibilities From a81728c9a20a64ec3d8f389e1864bd07b012e6a2 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 25 Oct 2024 08:20:04 +0200 Subject: [PATCH 059/106] Fix style issues --- CODE_OF_CONDUCT.md | 2 +- deploy/ansible/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c3c62a0b..8323daec 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at products@grycap.upv.es. All +reported by contacting the project team at . All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. diff --git a/deploy/ansible/README.md b/deploy/ansible/README.md index cd10fd90..bb79f54a 100644 --- a/deploy/ansible/README.md +++ b/deploy/ansible/README.md @@ -1,3 +1,3 @@ # Ansible playbook to deploy K3s and the OSCAR platform -Please refer to the [docs](https://docs.oscar.grycap.net/deploy-ansible/) for instructions. \ No newline at end of file +Please refer to the [docs](https://docs.oscar.grycap.net/deploy-ansible/) for instructions. From 8edbe5c512f1eee274e275842e9550406f15296e Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 12 Nov 2024 15:32:37 +0100 Subject: [PATCH 060/106] Definition of replica delegation criteria based onTOPSIS algorithm --- pkg/resourcemanager/delegate.go | 468 +++++++++++++++++++++++++++++++- 1 file changed, 462 insertions(+), 6 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index ecf950e1..30eb1e47 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -21,7 +21,9 @@ import ( "crypto/tls" "encoding/json" "fmt" + "io" "log" + "math" "math/rand" "net/http" "net/url" @@ -71,6 +73,187 @@ type NodeInfo struct { MemoryPercentage string `json:"memoryPercentage"` } +type Alternative struct { + Index int // Número de la alternativa + Preference float64 // Valor de la preferencia +} + +type JobStatus struct { + Status string `json:"status"` + CreationTime string `json:"creation_time"` + StartTime string `json:"start_time"` + FinishTime string `json:"finish_time"` +} +type JobStatuses map[string]JobStatus + +// Function to execute TOPSIS method +// Normalizes a column by dividing each value by the square root of the sum of squares. +func normalizeMatrix(matrix [][]float64) [][]float64 { + rows := len(matrix) + cols := len(matrix[0]) + normalized := make([][]float64, rows) + for i := range normalized { + normalized[i] = make([]float64, cols) + } + + for j := 0; j < cols; j++ { + // Calculate the norm (square root of the sum of squares of the column) + add := 0.0 + for i := 0; i < rows; i++ { + add += matrix[i][j] * matrix[i][j] + } + norm := math.Sqrt(add) + // Normalize the values ​​of the column + for i := 0; i < rows; i++ { + normalized[i][j] = matrix[i][j] / norm + } + } + return normalized +} + +// Multiply the normalized matrix by the weights. +func weightMatrix(matrix [][]float64, weight []float64) [][]float64 { + rows := len(matrix) + cols := len(matrix[0]) + weighted := make([][]float64, rows) + for i := range weighted { + weighted[i] = make([]float64, cols) + for j := 0; j < cols; j++ { + weighted[i][j] = matrix[i][j] * weight[j] + } + } + return weighted +} + +// Calculate the ideal and anti-ideal solutions. +func calculateSolutions(matrix [][]float64) (ideal []float64, antiIdeal []float64) { + rows := len(matrix) + cols := len(matrix[0]) + + ideal = make([]float64, cols) + antiIdeal = make([]float64, cols) + + for j := 0; j < cols; j++ { + // If the criterion is minimization (let's assume that the first criterion is the one we want to minimize) + + if j == 0 || j == 4 || j == 5 { + // For the ideal solution, we select the minimum value (instead of the maximum) + ideal[j] = matrix[0][j] + antiIdeal[j] = matrix[0][j] + for i := 0; i < rows; i++ { + if matrix[i][j] < ideal[j] { + ideal[j] = matrix[i][j] + } + if matrix[i][j] > antiIdeal[j] { + antiIdeal[j] = matrix[i][j] + } + } + } else { + // For maximization criteria, we normally use the maximum and minimum values + ideal[j] = matrix[0][j] + antiIdeal[j] = matrix[0][j] + for i := 0; i < rows; i++ { + if matrix[i][j] > ideal[j] { + ideal[j] = matrix[i][j] + } + if matrix[i][j] < antiIdeal[j] { + antiIdeal[j] = matrix[i][j] + } + } + } + } + return ideal, antiIdeal +} + +// Calculate the Euclidean distance between an alternative and the ideal or anti-ideal solution +func calculateDistance(alternative []float64, solution []float64) float64 { + add := 0.0 + for i := 0; i < len(alternative); i++ { + add += (alternative[i] - solution[i]) * (alternative[i] - solution[i]) + } + return math.Sqrt(add) +} + +// Calculate the preference index for each alternative +func calculatePreferences(matrix [][]float64, ideal []float64, antiIdeal []float64) []float64 { + rows := len(matrix) + preferences := make([]float64, rows) + + for i := 0; i < rows; i++ { + distanceIdeal := calculateDistance(matrix[i], ideal) + distanceAntiIdeal := calculateDistance(matrix[i], antiIdeal) + preferences[i] = distanceAntiIdeal / (distanceIdeal + distanceAntiIdeal) + } + return preferences +} + +// Order the alternatives from best to worst according to the preference index +func sortAlternatives(preferences []float64) []Alternative { + alternatives := make([]Alternative, len(preferences)) + + // Create a list of alternatives with their preference indices + for i := 0; i < len(preferences); i++ { + alternatives[i] = Alternative{ + Index: i + 1, // Alternativa 1, 2, etc. + Preference: preferences[i], + } + } + + // Sort the alternatives in descending order of preference + sort.Slice(alternatives, func(i, j int) bool { + return alternatives[i].Preference > alternatives[j].Preference + }) + + return alternatives +} + +func distancesFromBetter(alternatives []Alternative) []float64 { + distances := make([]float64, len(alternatives)-1) + + // Calculate distances with the first element + for i := 1; i < len(alternatives); i++ { + distances[i-1] = math.Abs(alternatives[0].Preference - alternatives[i].Preference) + } + + return distances +} + +// Function to randomly rearrange elements whose distance from the first is less than a threshold, including the first +func reorganizeIfNearby(alternatives []Alternative, distances []float64, threshold float64) []Alternative { + + // List of nearby elements (with distance less than the threshold, including the first element) + nearby := []Alternative{alternatives[0]} + + // Identify the other nearby elements + for i := 0; i < len(distances); i++ { + if distances[i] < threshold { + nearby = append(nearby, alternatives[i+1]) + } + } + + // Randomly shuffle nearby items + //rand.Seed(time.Now().UnixNano()) + rand.Shuffle(len(nearby), func(i, j int) { + nearby[i], nearby[j] = nearby[j], nearby[i] + }) + + // Create a new reorganized alternative list + newAlternatives := []Alternative{} + j := 0 + + // Insert the rearranged or unarranged elements + for i := 0; i < len(alternatives); i++ { + if i == 0 || distances[i-1] < threshold { + newAlternatives = append(newAlternatives, nearby[j]) // Add the rearranged items + j++ + } else { + newAlternatives = append(newAlternatives, alternatives[i]) // Keep non-close elements + } + } + + return newAlternatives +} + // DelegateJob sends the event to a service's replica func DelegateJob(service *types.Service, event string, logger *log.Logger) error { @@ -79,13 +262,171 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error defer mutex.Unlock() //Determine priority level of each replica to delegate - getClusterStatus(service) - fmt.Println("Replicas: ", service.Replicas) + if service.Delegation == "topsis" { + results := [][]float64{} + //ServiceCPU, err := strconv.ParseFloat(service.CPU, 64) + //if err != nil { + // fmt.Println("Error to converter CPU of service to int: ", err) + // continue + //} + for _, cred := range service.Replicas { + + cluster, ok := service.Clusters[cred.ClusterID] + if !ok { + //logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) + continue + } + + // Get token + token, err := getServiceToken(cred, cluster) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Parse the cluster's endpoint URL and add the service's path + JobURL, err := url.Parse(cluster.Endpoint) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + JobURL.Path = path.Join(JobURL.Path, "/system/logs/", cred.ServiceName) + + // Make request to get service's definition (including token) from cluster + req, err := http.NewRequest("GET", JobURL.String(), nil) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Add Headers + for k, v := range cred.Headers { + req.Header.Add(k, v) + } + + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Make HTTP client + + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } - // Check if replicas are sorted by priority and sort it if needed - if !sort.IsSorted(service.Replicas) { - sort.Stable(service.Replicas) - fmt.Println("Replicas Stable: ", service.Replicas) + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + resp, err := client.Do(req) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) // Utilizar io.ReadAll para leer el cuerpo + if err != nil { + fmt.Printf("Error al leer el cuerpo de la respuesta para %s: %v\n", cred.URL, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + var jobStatuses JobStatuses + err = json.Unmarshal(body, &jobStatuses) + if err != nil { + fmt.Println("Error decoding the JSON of the response:", err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + + // Show job statuses + + // Count job statuses + averageExecutionTime, pendingCount := countJobs(jobStatuses) + + JobURL, err = url.Parse(cluster.Endpoint) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + JobURL.Path = path.Join(JobURL.Path, "/system/status/") + req1, err := http.NewRequest("GET", JobURL.String(), nil) + + if err != nil { + fmt.Printf("Error al crear la solicitud para %s: %v\n", cred.URL, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + + // Add Headers + for k, v := range cred.Headers { + req.Header.Add(k, v) + } + + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Realizar la solicitud HTTP + + start := time.Now() + resp1, err := client.Do(req1) + duration := time.Since(start) + if err != nil { + //fmt.Printf("Error al realizar la solicitud para %s: %v\n", cred.URL, err) + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + continue + } + + defer resp1.Body.Close() + var clusterStatus GeneralInfo + err = json.NewDecoder(resp1.Body).Decode(&clusterStatus) + if err != nil { + fmt.Println("Error decoding the JSON of the response:", err) + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + continue + } + + serviceCPU, err := strconv.ParseFloat(service.CPU, 64) + + if err != nil { + fmt.Println("Error converting service CPU to float: ", err) + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + continue + } + + results = createParameters(results, duration, clusterStatus, serviceCPU, averageExecutionTime, float64(pendingCount)) + + } + // Print results as a matrix + fmt.Println("Results matrix:") + for _, row := range results { + fmt.Println(row) + } + + // Criteria weights () + weight := []float64{1, 8, 18, 65, 2, 6} + preferences := topsisMethod(results, weight) + newAlternatives := sortbyUmbral(preferences, 20) + + // Print reordered alternatives + fmt.Println("\nAlternatives reordered by threshold:") + for _, alt := range newAlternatives { + fmt.Printf("Alternative %d: %f\n", alt.Index, alt.Preference) + service.Replicas[alt.Index].Priority = uint(alt.Preference) + } + fmt.Println("Replicas stable to topsis method: ", service.Replicas) + + //fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") + } else { + getClusterStatus(service) + fmt.Println("Replicas: ", service.Replicas) + + // Check if replicas are sorted by priority and sort it if needed + if !sort.IsSorted(service.Replicas) { + sort.Stable(service.Replicas) + fmt.Println("Replicas Stable: ", service.Replicas) + } } fmt.Println("Event : ", event) @@ -433,12 +774,14 @@ func getClusterStatus(service *types.Service) { service.Replicas[id].Priority = uint(mappedCPUPriority) //replica.Priority = uint(mappedCPUPriority) fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") + } else if service.Delegation != "static" { service.Replicas[id].Priority = noDelegateCode //replica.Priority = noDelegateCode fmt.Println("Error when declaring the type of delegation in ClusterID ", replica.ClusterID) continue } + } else { fmt.Println("No CPU capacity to delegate job in ClusterID ", replica.ClusterID) if service.Delegation != "static" { @@ -475,3 +818,116 @@ func mapToRange(value, minInput, maxInput, maxOutput, minOutput int64) int { return mappedInt } + +func topsisMethod(results [][]float64, weight []float64) []float64 { + + // Step 1: Normalize the matrix + matrixNormalized := normalizeMatrix(results) + //fmt.Println("//Normalized matrix: ") + //for _, row := range matrizNormalizada { + // fmt.Println(row) + //} + + // Step 2: Weight the matrix + matrixWeighted := weightMatrix(matrixNormalized, weight) + //fmt.Println("\n//Weighted Matrix:") + //for _, row := range matrizPonderada { + // fmt.Println(row) + //} + + // Step 3: Compute the ideal and anti-ideal solution + ideal, antiIdeal := calculateSolutions(matrixWeighted) + //fmt.Println("\nIdeal Solution:", ideal) + //fmt.Println("Anti-Ideal Solution:", antiIdeal) + + // Step 4: Compute the distances and preference index + preferences := calculatePreferences(matrixWeighted, ideal, antiIdeal) + fmt.Println("\nPreference index:", preferences) + + return preferences + +} + +func sortbyUmbral(preferences []float64, umbral int) []Alternative { + // Step 5: Order alternatives from best to worst + alternativesSort := sortAlternatives(preferences) + + fmt.Println("\nAlternatives ordered from best to worst:") + for _, alt := range alternativesSort { + fmt.Printf("Alternative %d: %f\n", alt.Index, alt.Preference) + + //mapped := mapToRange(int64(alt*100.0), 0, 100, 100, 0) + //fmt.Printf("Original Preference: %.4f -> Mapped %d\n", alt, mapped) + } + + distancesFromBetter := distancesFromBetter(alternativesSort) + + // Threshold to reorder nearby elements + f := float64(umbral) / 100.0 + threshold := alternativesSort[0].Preference * f + fmt.Printf("The threshold is the %d %% of the best value: %f ", umbral, threshold) + + // Randomly reorder elements whose distance is less than the threshold, including the first one + newAlternatives := reorganizeIfNearby(alternativesSort, distancesFromBetter, threshold) + + var priority_map int + for id, alt := range newAlternatives { + //fmt.Printf("Alternative %d: %d\n", alt.Index, int(alt.Preference*100)) + priority_map = mapToRange(int64(alt.Preference*100.0), 0, 100, 100, 0) + newAlternatives[id].Preference = float64(priority_map) + //fmt.Printf("Alternative %d: %f\n", alt.Index, newAlternatives[id].Preference) + } + + return newAlternatives + +} + +func countJobs(jobStatuses map[string]JobStatus) (float64, int) { + totalJobs := 0 + succeededCount := 0 + failedCount := 0 + pendingCount := 0 + totalExecutionTime := 0.0 + for _, status := range jobStatuses { + totalJobs++ + switch status.Status { + case "Succeeded": + succeededCount++ + creationTime, _ := time.Parse(time.RFC3339, status.CreationTime) + finishTime, _ := time.Parse(time.RFC3339, status.FinishTime) + duration := finishTime.Sub(creationTime).Seconds() // Duration in seconds + totalExecutionTime += duration + case "Failed": + failedCount++ + case "Pending": // Pending jobs + pendingCount++ + } + } + + var averageExecutionTime float64 = 1e6 + if succeededCount > 0 { + averageExecutionTime = totalExecutionTime / float64(succeededCount) + } + return averageExecutionTime, pendingCount + +} + +func createParameters(results [][]float64, duration time.Duration, clusterStatus GeneralInfo, serviceCPU float64, averageExecutionTime float64, pendingCount float64) [][]float64 { + maxNodeCPU := float64(clusterStatus.CPUMaxFree) + dist := maxNodeCPU - (1000 * serviceCPU) + + if dist >= 0 { + results = append(results, []float64{ + duration.Seconds(), // Latency (ms) + float64(clusterStatus.NumberNodes), // Number of nodes + float64(clusterStatus.MemoryFreeTotal), // Total Memory Free + float64(clusterStatus.CPUFreeTotal), // Total CPU Free + averageExecutionTime, // averageExecutionTime + pendingCount + 0.1, //pendingCount + // More criteria can be added here if needed + }) + } else { + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + } + return results +} From f27262b08a40b800de71e61547e8f92726910773 Mon Sep 17 00:00:00 2001 From: Caterina <36919673+catttam@users.noreply.github.com> Date: Mon, 18 Nov 2024 12:27:04 +0100 Subject: [PATCH 061/106] Update mkdocs.yml --- mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 6a6457cd..9703be7f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,7 +21,7 @@ nav: - oscar-cli.md - usage-ui.md - api.md - - minio-upload.md + - minio_usage.md - Service Execution: - invoking.md @@ -64,4 +64,4 @@ plugins: - search - render_swagger -copyright: "© GRyCAP - I3M - Universitat Politècnica de València, Spain." \ No newline at end of file +copyright: "© GRyCAP - I3M - Universitat Politècnica de València, Spain." From 6cb21c57a1bd0a2b4a903304a6626acc9f87c2a9 Mon Sep 17 00:00:00 2001 From: Caterina <36919673+catttam@users.noreply.github.com> Date: Mon, 18 Nov 2024 12:37:20 +0100 Subject: [PATCH 062/106] Update minio_usage.md --- docs/minio_usage.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/minio_usage.md b/docs/minio_usage.md index a8d41b20..904a4197 100644 --- a/docs/minio_usage.md +++ b/docs/minio_usage.md @@ -30,7 +30,8 @@ MinIO buckets can also be managed through [oscar-cli command-line](https://githu - [put-file](https://docs.oscar.grycap.net/oscar-cli/#put-file): Upload a file on a service storage provider. An example of a put-file operation: - ``` sh + + ``` bash oscar-cli service put-file fish-detector.yaml minio .path/to/your/images ./fish-detector/input/ ``` @@ -38,11 +39,12 @@ MinIO buckets can also be managed through [oscar-cli command-line](https://githu - *Install the client*: Detailed instructions for installing the MinIO client (mc) are available in [the official documentation](https://min.io/docs/minio/linux/reference/minio-mc.html#install-mc). - *Configure the MinIO instance*: The client requires credentials to connect and interact with the MinIO instance. This configuration can be set with the following command: - ``` sh + ``` bash mc alias set myminio https://minio.gracious-varahamihira6.im.grycap.net YOUR-ACCESS-KEY YOUR-SECRET-KEY ``` Once the client is configured, users can perform various operations supported by the MinIO client. For a complete list of available commands and their usage, refer to the [MinIO client reference](https://min.io/docs/minio/linux/reference/minio-mc.html#command-quick-reference). The following example demonstrates a PUT operation, where a file is uploaded to a specific folder within a bucket. - ``` sh + + ```bash mc cp /path/to/your/images/*.jpg myminio/fish-detector/input/ ``` From 60c17558cdab9e0de6b500287fac228b10ea5b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Mon, 18 Nov 2024 12:43:12 +0100 Subject: [PATCH 063/106] Fixed homogeneous use of hyphens in file nomenclature --- docs/{minio_usage.md => minio-usage.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/{minio_usage.md => minio-usage.md} (98%) diff --git a/docs/minio_usage.md b/docs/minio-usage.md similarity index 98% rename from docs/minio_usage.md rename to docs/minio-usage.md index 904a4197..32fd22a6 100644 --- a/docs/minio_usage.md +++ b/docs/minio-usage.md @@ -1,4 +1,4 @@ -# Accessing and managing MinIO storage provider +# Using the MinIO Storage Provider Each OSCAR cluster includes a deployed MinIO instance, which is used to trigger service executions. When a service is configured to use MinIO as its storage provider, it monitors a specified input folder for new data. Whenever new data is added to this folder, it triggers the associated service to execute. From 64643dc66004dd81d4d37e4a24447fa4b6aece84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Molt=C3=B3?= Date: Mon, 18 Nov 2024 12:44:35 +0100 Subject: [PATCH 064/106] Update proper naming in TOC --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 9703be7f..18bb0df2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,7 +21,7 @@ nav: - oscar-cli.md - usage-ui.md - api.md - - minio_usage.md + - MinIO: minio-usage.md - Service Execution: - invoking.md From 9e10369f6a3b3c02a7c4901cca21c65051e05b46 Mon Sep 17 00:00:00 2001 From: SergioLangaritaBenitez Date: Wed, 20 Nov 2024 13:04:20 +0100 Subject: [PATCH 065/106] config shows oidc-groups --- pkg/types/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/types/config.go b/pkg/types/config.go index b871ba86..6ad0a3a9 100644 --- a/pkg/types/config.go +++ b/pkg/types/config.go @@ -183,7 +183,7 @@ type Config struct { // OIDCGroups OpenID comma-separated group list to grant access in the cluster. // Groups defined in the "eduperson_entitlement" OIDC scope, // as described here: https://docs.egi.eu/providers/check-in/sp/#10-groups - OIDCGroups []string `json:"-"` + OIDCGroups []string `json:"oidc_groups"` // IngressHost string `json:"-"` From 2a3e88ab2a4c4528a53d1b03dec1864814bd9bb5 Mon Sep 17 00:00:00 2001 From: SergioLangaritaBenitez Date: Wed, 20 Nov 2024 13:47:03 +0100 Subject: [PATCH 066/106] config_test update --- pkg/handlers/config_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/handlers/config_test.go b/pkg/handlers/config_test.go index 388c3c1a..08f93ccc 100644 --- a/pkg/handlers/config_test.go +++ b/pkg/handlers/config_test.go @@ -43,6 +43,7 @@ func createExpectedBody(access_key string, secret_key string, cfg *types.Config) "gpu_available": false, "interLink_available": false, "yunikorn_enable": false, + "oidc_groups": "", }, "minio_provider": map[string]interface{}{ "endpoint": cfg.MinIOProvider.Endpoint, From 473c04ac24f2f9db26a9cfe899feffc39e6567ad Mon Sep 17 00:00:00 2001 From: SergioLangaritaBenitez Date: Wed, 20 Nov 2024 13:53:11 +0100 Subject: [PATCH 067/106] config_test update --- pkg/handlers/config_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/handlers/config_test.go b/pkg/handlers/config_test.go index 08f93ccc..7c74fcb5 100644 --- a/pkg/handlers/config_test.go +++ b/pkg/handlers/config_test.go @@ -43,7 +43,7 @@ func createExpectedBody(access_key string, secret_key string, cfg *types.Config) "gpu_available": false, "interLink_available": false, "yunikorn_enable": false, - "oidc_groups": "", + "oidc_groups": nil, }, "minio_provider": map[string]interface{}{ "endpoint": cfg.MinIOProvider.Endpoint, From 8b6ce310d18d1ac1134e3813f08f193b87bb3bb1 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 10:25:13 +0100 Subject: [PATCH 068/106] Improve create test --- pkg/handlers/create_test.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/handlers/create_test.go b/pkg/handlers/create_test.go index 335ab2d3..912763dd 100644 --- a/pkg/handlers/create_test.go +++ b/pkg/handlers/create_test.go @@ -38,7 +38,7 @@ func TestMakeCreateHandler(t *testing.T) { // Create a fake MinIO server server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path != "/test" && hreq.URL.Path != "/test/input/" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + if hreq.URL.Path != "/test" && hreq.URL.Path != "/test/input/" && hreq.URL.Path != "/test/output/" && hreq.URL.Path != "/test/mount/" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) } @@ -88,10 +88,14 @@ func TestMakeCreateHandler(t *testing.T) { ], "output": [ { - "storage_provider": "webdav.id", - "path": "/output" + "storage_provider": "minio", + "path": "/test/output" } ], + "mount": { + "storage_provider": "minio", + "path": "/test/mount" + }, "storage_providers": { "webdav": { "id": { From 3031d82c54eed366b69c83d0da25b79f62b29ccd Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 12:25:28 +0100 Subject: [PATCH 069/106] Add multitenancy test --- pkg/utils/auth/multitenancy_test.go | 149 ++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 pkg/utils/auth/multitenancy_test.go diff --git a/pkg/utils/auth/multitenancy_test.go b/pkg/utils/auth/multitenancy_test.go new file mode 100644 index 00000000..2f93a055 --- /dev/null +++ b/pkg/utils/auth/multitenancy_test.go @@ -0,0 +1,149 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package auth + +import ( + "context" + "encoding/base64" + "testing" + + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestNewMultitenancyConfig(t *testing.T) { + clientset := fake.NewSimpleClientset() + uid := "test-uid" + mc := NewMultitenancyConfig(clientset, uid) + + if mc.owner_uid != uid { + t.Errorf("expected owner_uid to be %s, got %s", uid, mc.owner_uid) + } +} + +func TestUpdateCache(t *testing.T) { + clientset := fake.NewSimpleClientset() + mc := NewMultitenancyConfig(clientset, "test-uid") + + mc.UpdateCache("user1") + if len(mc.usersCache) != 1 { + t.Errorf("expected usersCache length to be 1, got %d", len(mc.usersCache)) + } +} + +func TestClearCache(t *testing.T) { + clientset := fake.NewSimpleClientset() + mc := NewMultitenancyConfig(clientset, "test-uid") + + mc.UpdateCache("user1") + mc.ClearCache() + if len(mc.usersCache) != 0 { + t.Errorf("expected usersCache length to be 0, got %d", len(mc.usersCache)) + } +} + +func TestUserExists(t *testing.T) { + clientset := fake.NewSimpleClientset() + mc := NewMultitenancyConfig(clientset, "test-uid") + + secret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "user1", + Namespace: ServicesNamespace, + }, + } + clientset.CoreV1().Secrets(ServicesNamespace).Create(context.TODO(), secret, metav1.CreateOptions{}) + + exists := mc.UserExists("user1@egi.eu") + if !exists { + t.Errorf("expected user1 to exist") + } +} + +func TestCreateSecretForOIDC(t *testing.T) { + clientset := fake.NewSimpleClientset() + mc := NewMultitenancyConfig(clientset, "test-uid") + + err := mc.CreateSecretForOIDC("user1@egi.eu", "secret-key") + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + secret, err := clientset.CoreV1().Secrets(ServicesNamespace).Get(context.TODO(), "user1", metav1.GetOptions{}) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + if secret.StringData["secretKey"] != "secret-key" { + t.Errorf("expected secretKey to be 'secret-key', got %s", secret.StringData["secretKey"]) + } +} + +func TestGetUserCredentials(t *testing.T) { + clientset := fake.NewSimpleClientset() + mc := NewMultitenancyConfig(clientset, "test-uid") + + secret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "user1", + Namespace: ServicesNamespace, + }, + Data: map[string][]byte{ + "accessKey": []byte("access-key"), + "secretKey": []byte("secret-key"), + }, + } + clientset.CoreV1().Secrets(ServicesNamespace).Create(context.TODO(), secret, metav1.CreateOptions{}) + + accessKey, secretKey, err := mc.GetUserCredentials("user1@egi.eu") + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + if accessKey != "access-key" { + t.Errorf("expected accessKey to be 'access-key', got %s", accessKey) + } + + if secretKey != "secret-key" { + t.Errorf("expected secretKey to be 'secret-key', got %s", secretKey) + } +} + +func TestGenerateRandomKey(t *testing.T) { + key, err := GenerateRandomKey(32) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + dkey, _ := base64.RawURLEncoding.DecodeString(key) + if len(dkey) != 32 { + t.Errorf("expected key length to be 32, got %d", len(key)) + } +} + +func TestCheckUsersInCache(t *testing.T) { + clientset := fake.NewSimpleClientset() + mc := NewMultitenancyConfig(clientset, "test-uid") + + mc.UpdateCache("user1") + mc.UpdateCache("user2") + + notFoundUsers := mc.CheckUsersInCache([]string{"user1", "user3"}) + if len(notFoundUsers) != 1 { + t.Errorf("expected notFoundUsers length to be 1, got %d", len(notFoundUsers)) + } +} From 40ea41aff66b76e51e2fccec9ba143bdb95f485c Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 12:51:27 +0100 Subject: [PATCH 070/106] Add multitenancy auth test --- pkg/handlers/update_test.go | 2 +- pkg/utils/auth/auth.go | 4 +- pkg/utils/auth/auth_test.go | 102 ++++++++++++++++++++++++++++++++++++ pkg/utils/auth/oidc.go | 2 +- 4 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 pkg/utils/auth/auth_test.go diff --git a/pkg/handlers/update_test.go b/pkg/handlers/update_test.go index 636caa9a..034b3fed 100644 --- a/pkg/handlers/update_test.go +++ b/pkg/handlers/update_test.go @@ -96,7 +96,7 @@ func TestMakeUpdateHandler(t *testing.T) { } } }, - "allowed_users": ["user1", "user2"] + "allowed_users": ["somelonguid1@egi.eu", "somelonguid2@egi.eu"] } `) req, _ := http.NewRequest("PUT", "/system/services", body) diff --git a/pkg/utils/auth/auth.go b/pkg/utils/auth/auth.go index 559c6aad..766e4963 100644 --- a/pkg/utils/auth/auth.go +++ b/pkg/utils/auth/auth.go @@ -29,7 +29,7 @@ import ( ) // GetAuthMiddleware returns the appropriate gin auth middleware -func GetAuthMiddleware(cfg *types.Config, kubeClientset *kubernetes.Clientset) gin.HandlerFunc { +func GetAuthMiddleware(cfg *types.Config, kubeClientset kubernetes.Interface) gin.HandlerFunc { if !cfg.OIDCEnable { return gin.BasicAuth(gin.Accounts{ // Use the config's username and password for basic auth @@ -40,7 +40,7 @@ func GetAuthMiddleware(cfg *types.Config, kubeClientset *kubernetes.Clientset) g } // CustomAuth returns a custom auth handler (gin middleware) -func CustomAuth(cfg *types.Config, kubeClientset *kubernetes.Clientset) gin.HandlerFunc { +func CustomAuth(cfg *types.Config, kubeClientset kubernetes.Interface) gin.HandlerFunc { basicAuthHandler := gin.BasicAuth(gin.Accounts{ // Use the config's username and password for basic auth cfg.Username: cfg.Password, diff --git a/pkg/utils/auth/auth_test.go b/pkg/utils/auth/auth_test.go new file mode 100644 index 00000000..f92c553b --- /dev/null +++ b/pkg/utils/auth/auth_test.go @@ -0,0 +1,102 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package auth + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/gin-gonic/gin" + "github.com/grycap/oscar/v3/pkg/types" + "k8s.io/client-go/kubernetes/fake" +) + +func TestGetAuthMiddleware(t *testing.T) { + cfg := &types.Config{ + OIDCEnable: false, + Username: "testuser", + Password: "testpass", + } + kubeClientset := fake.NewSimpleClientset() + + router := gin.New() + router.Use(GetAuthMiddleware(cfg, kubeClientset)) + router.GET("/", func(c *gin.Context) { + c.JSON(http.StatusOK, "") + }) + + w := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/", nil) + req.SetBasicAuth("testuser", "testpass") + router.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Errorf("expected status %v, got %v", http.StatusOK, w.Code) + } + + we := httptest.NewRecorder() + reqe, _ := http.NewRequest("GET", "/", nil) + reqe.SetBasicAuth("testuser", "otherpass") + router.ServeHTTP(we, reqe) + + if we.Code != http.StatusUnauthorized { + t.Errorf("expected status %v, got %v", http.StatusUnauthorized, we.Code) + } +} + +func TestGetLoggerMiddleware(t *testing.T) { + router := gin.New() + router.Use(GetLoggerMiddleware()) + router.GET("/", func(c *gin.Context) { + c.JSON(http.StatusOK, "") + }) + + w := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/", nil) + router.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Errorf("expected status %v, got %v", http.StatusOK, w.Code) + } +} + +func TestGetUIDFromContext(t *testing.T) { + c, _ := gin.CreateTestContext(httptest.NewRecorder()) + c.Set("uidOrigin", "testuid") + + uid, err := GetUIDFromContext(c) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if uid != "testuid" { + t.Errorf("expected uid %v, got %v", "testuid", uid) + } +} + +func TestGetMultitenancyConfigFromContext(t *testing.T) { + c, _ := gin.CreateTestContext(httptest.NewRecorder()) + mc := &MultitenancyConfig{} + c.Set("multitenancyConfig", mc) + + mcFromContext, err := GetMultitenancyConfigFromContext(c) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if mcFromContext != mc { + t.Errorf("expected multitenancyConfig %v, got %v", mc, mcFromContext) + } +} diff --git a/pkg/utils/auth/oidc.go b/pkg/utils/auth/oidc.go index 7582695f..19da4d4f 100644 --- a/pkg/utils/auth/oidc.go +++ b/pkg/utils/auth/oidc.go @@ -76,7 +76,7 @@ func NewOIDCManager(issuer string, subject string, groups []string) (*oidcManage } // getIODCMiddleware returns the Gin's handler middleware to validate OIDC-based auth -func getOIDCMiddleware(kubeClientset *kubernetes.Clientset, minIOAdminClient *utils.MinIOAdminClient, issuer string, subject string, groups []string) gin.HandlerFunc { +func getOIDCMiddleware(kubeClientset kubernetes.Interface, minIOAdminClient *utils.MinIOAdminClient, issuer string, subject string, groups []string) gin.HandlerFunc { oidcManager, err := NewOIDCManager(issuer, subject, groups) if err != nil { return func(c *gin.Context) { From 4f37240bfa6a060a85df2d3167a5a0c763faf3f7 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 13:15:41 +0100 Subject: [PATCH 071/106] Add codacy conf file --- .codacy.yaml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .codacy.yaml diff --git a/.codacy.yaml b/.codacy.yaml new file mode 100644 index 00000000..7d2c2a01 --- /dev/null +++ b/.codacy.yaml @@ -0,0 +1,2 @@ +exclude_paths: + - "**/*_test.go" From bcb946e786297dac858813d44e6a9d6dd7d6e52e Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 13:23:16 +0100 Subject: [PATCH 072/106] Add codacy conf file --- .codacy.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.codacy.yaml b/.codacy.yaml index 7d2c2a01..4cb1c2ba 100644 --- a/.codacy.yaml +++ b/.codacy.yaml @@ -1,2 +1,3 @@ +--- exclude_paths: - "**/*_test.go" From 693f7dd656a7eb28655ae970ec5b0881760b1ada Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 13:29:28 +0100 Subject: [PATCH 073/106] Del codacy conf file --- .codacy.yaml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .codacy.yaml diff --git a/.codacy.yaml b/.codacy.yaml deleted file mode 100644 index 4cb1c2ba..00000000 --- a/.codacy.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -exclude_paths: - - "**/*_test.go" From f839b527ef36d2a85b4bc4de91ecad3e1909594d Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Thu, 21 Nov 2024 16:53:22 +0100 Subject: [PATCH 074/106] Add tests --- go.mod | 1 + go.sum | 13 ++++ pkg/utils/auth/auth_test.go | 43 +++++++++++ pkg/utils/auth/oidc_test.go | 147 ++++++++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+) create mode 100644 pkg/utils/auth/oidc_test.go diff --git a/go.mod b/go.mod index 508637a0..c29f3ffe 100644 --- a/go.mod +++ b/go.mod @@ -34,6 +34,7 @@ require ( require ( github.com/fatih/color v1.14.1 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/rs/xid v1.4.0 // indirect diff --git a/go.sum b/go.sum index 67ddba40..3ef351e8 100644 --- a/go.sum +++ b/go.sum @@ -108,6 +108,8 @@ github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXK github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -151,6 +153,7 @@ github.com/grycap/cdmi-client-go v0.1.1/go.mod h1:ZqWeQS3YBJVXxg3HOIkAu1MLNJ4+7s github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -274,6 +277,16 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= diff --git a/pkg/utils/auth/auth_test.go b/pkg/utils/auth/auth_test.go index f92c553b..1a9c50b5 100644 --- a/pkg/utils/auth/auth_test.go +++ b/pkg/utils/auth/auth_test.go @@ -18,6 +18,7 @@ package auth import ( "net/http" "net/http/httptest" + "strings" "testing" "github.com/gin-gonic/gin" @@ -100,3 +101,45 @@ func TestGetMultitenancyConfigFromContext(t *testing.T) { t.Errorf("expected multitenancyConfig %v, got %v", mc, mcFromContext) } } + +func TestCustomAuth(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + if !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { + t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) + } + if hreq.URL.Path == "/minio/admin/v3/info" { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) + } else { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"status": "success"}`)) + } + })) + + cfg := &types.Config{ + OIDCEnable: false, + Username: "testuser", + Password: "testpass", + MinIOProvider: &types.MinIOProvider{ + Endpoint: server.URL, + AccessKey: "minio", + SecretKey: "minio123", + }, + } + kubeClientset := fake.NewSimpleClientset() + + router := gin.New() + router.Use(CustomAuth(cfg, kubeClientset)) + router.GET("/", func(c *gin.Context) { + c.JSON(http.StatusOK, "") + }) + + w := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/", nil) + req.SetBasicAuth("testuser", "testpass") + router.ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Errorf("expected status %v, got %v", http.StatusOK, w.Code) + } +} diff --git a/pkg/utils/auth/oidc_test.go b/pkg/utils/auth/oidc_test.go new file mode 100644 index 00000000..f8cc8526 --- /dev/null +++ b/pkg/utils/auth/oidc_test.go @@ -0,0 +1,147 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package auth + +import ( + "crypto/rand" + "crypto/rsa" + "fmt" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/gin-gonic/gin" + "github.com/golang-jwt/jwt/v4" + "github.com/grycap/oscar/v3/pkg/utils" + "k8s.io/client-go/kubernetes/fake" +) + +func TestNewOIDCManager(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + if hreq.URL.Path == "/.well-known/openid-configuration" { + rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `"}`)) + } + })) + + issuer := server.URL + subject := "test-subject" + groups := []string{"group1", "group2"} + + oidcManager, err := NewOIDCManager(issuer, subject, groups) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + if oidcManager == nil { + t.Errorf("expected oidcManager to be non-nil") + } +} + +func TestGetUserInfo(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + fmt.Println(hreq.URL.Path) + rw.Header().Set("Content-Type", "application/json") + if hreq.URL.Path == "/.well-known/openid-configuration" { + rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) + } else if hreq.URL.Path == "/userinfo" { + rw.Write([]byte(`{"sub": "test-subject", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) + } + })) + + issuer := server.URL + subject := "test-subject" + groups := []string{"group1", "group2"} + + oidcManager, err := NewOIDCManager(issuer, subject, groups) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + rawToken := "test-token" + ui, err := oidcManager.GetUserInfo(rawToken) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + if ui.Subject != "test-subject" { + t.Errorf("expected subject to be %v, got %v", "test-subject", ui.Subject) + } + if len(ui.Groups) != 1 || ui.Groups[0] != "group1" { + t.Errorf("expected groups to be %v, got %v", []string{"group1"}, ui.Groups) + } +} + +func TestIsAuthorised(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + rw.Header().Set("Content-Type", "application/json") + if hreq.URL.Path == "/.well-known/openid-configuration" { + rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) + } else if hreq.URL.Path == "/userinfo" { + rw.Write([]byte(`{"sub": "test-subject", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) + } + })) + + issuer := server.URL + subject := "test-subject" + groups := []string{"group1", "group2"} + + oidcManager, err := NewOIDCManager(issuer, subject, groups) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + claims := jwt.MapClaims{ + "iss": issuer, + "sub": subject, + "exp": time.Now().Add(1 * time.Hour).Unix(), + "iat": time.Now().Unix(), + } + token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims) + privateKey, _ := rsa.GenerateKey(rand.Reader, 1024) + rawToken, _ := token.SignedString(privateKey) + oidcManager.config.InsecureSkipSignatureCheck = true + + if !oidcManager.IsAuthorised(rawToken) { + t.Errorf("expected token to be authorised") + } +} + +func TestGetOIDCMiddleware(t *testing.T) { + kubeClientset := fake.NewSimpleClientset() + minIOAdminClient := &utils.MinIOAdminClient{} + issuer := "https://example.com" + subject := "test-subject" + groups := []string{"group1", "group2"} + + middleware := getOIDCMiddleware(kubeClientset, minIOAdminClient, issuer, subject, groups) + if middleware == nil { + t.Errorf("expected middleware to be non-nil") + } + + // Create a new Gin context + gin.SetMode(gin.TestMode) + c, _ := gin.CreateTestContext(nil) + + // Test the middleware with an invalid token + c.Request = &http.Request{ + Header: http.Header{ + "Authorization": []string{"Bearer invalid-token"}, + }, + } + middleware(c) + if c.Writer.Status() != http.StatusUnauthorized { + t.Errorf("expected status to be %v, got %v", http.StatusUnauthorized, c.Writer.Status()) + } +} From 93cf1c112dd3f3273451be7ebf857f1737862496 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 08:19:29 +0100 Subject: [PATCH 075/106] Fix test --- pkg/utils/auth/oidc_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/utils/auth/oidc_test.go b/pkg/utils/auth/oidc_test.go index f8cc8526..680db785 100644 --- a/pkg/utils/auth/oidc_test.go +++ b/pkg/utils/auth/oidc_test.go @@ -132,7 +132,8 @@ func TestGetOIDCMiddleware(t *testing.T) { // Create a new Gin context gin.SetMode(gin.TestMode) - c, _ := gin.CreateTestContext(nil) + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) // Test the middleware with an invalid token c.Request = &http.Request{ From ef3e9da50a8ad47b8a8c8125affb5953d7405e0a Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 09:49:32 +0100 Subject: [PATCH 076/106] Improve tests --- pkg/utils/auth/auth.go | 2 +- pkg/utils/auth/oidc.go | 7 +- pkg/utils/auth/oidc_test.go | 125 ++++++++++++++++++++++++++++-------- 3 files changed, 104 insertions(+), 30 deletions(-) diff --git a/pkg/utils/auth/auth.go b/pkg/utils/auth/auth.go index 766e4963..57795a48 100644 --- a/pkg/utils/auth/auth.go +++ b/pkg/utils/auth/auth.go @@ -53,7 +53,7 @@ func CustomAuth(cfg *types.Config, kubeClientset kubernetes.Interface) gin.Handl minIOAdminClient.CreateAllUsersGroup() minIOAdminClient.UpdateUsersInGroup(oscarUser, "all_users_group", false) - oidcHandler := getOIDCMiddleware(kubeClientset, minIOAdminClient, cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups) + oidcHandler := getOIDCMiddleware(kubeClientset, minIOAdminClient, cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups, nil) return func(c *gin.Context) { authHeader := c.GetHeader("Authorization") if strings.HasPrefix(authHeader, "Bearer ") { diff --git a/pkg/utils/auth/oidc.go b/pkg/utils/auth/oidc.go index 19da4d4f..eab75485 100644 --- a/pkg/utils/auth/oidc.go +++ b/pkg/utils/auth/oidc.go @@ -76,8 +76,11 @@ func NewOIDCManager(issuer string, subject string, groups []string) (*oidcManage } // getIODCMiddleware returns the Gin's handler middleware to validate OIDC-based auth -func getOIDCMiddleware(kubeClientset kubernetes.Interface, minIOAdminClient *utils.MinIOAdminClient, issuer string, subject string, groups []string) gin.HandlerFunc { +func getOIDCMiddleware(kubeClientset kubernetes.Interface, minIOAdminClient *utils.MinIOAdminClient, issuer string, subject string, groups []string, oidcConfig *oidc.Config) gin.HandlerFunc { oidcManager, err := NewOIDCManager(issuer, subject, groups) + if oidcConfig != nil { + oidcManager.config = oidcConfig + } if err != nil { return func(c *gin.Context) { c.AbortWithStatus(http.StatusUnauthorized) @@ -199,7 +202,7 @@ func (om *oidcManager) UserHasVO(rawToken string, vo string) (bool, error) { func (om *oidcManager) GetUID(rawToken string) (string, error) { ui, err := om.GetUserInfo(rawToken) oidcLogger.Println("received uid: ", ui.Subject) - if err != nil { + if err == nil { return ui.Subject, nil } return "", err diff --git a/pkg/utils/auth/oidc_test.go b/pkg/utils/auth/oidc_test.go index 680db785..142e520f 100644 --- a/pkg/utils/auth/oidc_test.go +++ b/pkg/utils/auth/oidc_test.go @@ -24,8 +24,10 @@ import ( "testing" "time" + "github.com/coreos/go-oidc/v3/oidc" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v4" + "github.com/grycap/oscar/v3/pkg/types" "github.com/grycap/oscar/v3/pkg/utils" "k8s.io/client-go/kubernetes/fake" ) @@ -89,12 +91,12 @@ func TestIsAuthorised(t *testing.T) { if hreq.URL.Path == "/.well-known/openid-configuration" { rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) } else if hreq.URL.Path == "/userinfo" { - rw.Write([]byte(`{"sub": "test-subject", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) + rw.Write([]byte(`{"sub": "user1@egi.eu", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) } })) issuer := server.URL - subject := "test-subject" + subject := "user1@egi.eu" groups := []string{"group1", "group2"} oidcManager, err := NewOIDCManager(issuer, subject, groups) @@ -102,47 +104,116 @@ func TestIsAuthorised(t *testing.T) { t.Errorf("expected no error, got %v", err) } - claims := jwt.MapClaims{ - "iss": issuer, - "sub": subject, - "exp": time.Now().Add(1 * time.Hour).Unix(), - "iat": time.Now().Unix(), - } - token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims) - privateKey, _ := rsa.GenerateKey(rand.Reader, 1024) - rawToken, _ := token.SignedString(privateKey) + rawToken := GetToken(issuer, subject) oidcManager.config.InsecureSkipSignatureCheck = true if !oidcManager.IsAuthorised(rawToken) { t.Errorf("expected token to be authorised") } + + resg1, err2 := oidcManager.UserHasVO(rawToken, "group1") + if err2 != nil { + t.Errorf("expected no error, got %v", err) + } + if !resg1 { + t.Errorf("expected user to have VO") + } + resg2, err3 := oidcManager.UserHasVO(rawToken, "group2") + if err3 != nil { + t.Errorf("expected no error, got %v", err) + } + if resg2 { + t.Errorf("expected user not to have VO") + } + + uid, _ := oidcManager.GetUID(rawToken) + if uid != subject { + t.Errorf("expected uid to be %v, got %v", subject, uid) + } } func TestGetOIDCMiddleware(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { + if hreq.URL.Path == "/.well-known/openid-configuration" { + rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) + } else if hreq.URL.Path == "/userinfo" { + rw.Write([]byte(`{"sub": "user@egi.eu", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) + } else if hreq.URL.Path == "/minio/admin/v3/info" { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) + } else { + rw.WriteHeader(http.StatusOK) + rw.Write([]byte(`{"status": "success"}`)) + } + })) + kubeClientset := fake.NewSimpleClientset() - minIOAdminClient := &utils.MinIOAdminClient{} - issuer := "https://example.com" - subject := "test-subject" + cfg := types.Config{ + MinIOProvider: &types.MinIOProvider{ + Endpoint: server.URL, + Verify: false, + }, + } + minIOAdminClient, _ := utils.MakeMinIOAdminClient(&cfg) + issuer := server.URL + subject := "user@egi.eu" groups := []string{"group1", "group2"} - middleware := getOIDCMiddleware(kubeClientset, minIOAdminClient, issuer, subject, groups) + oidcConfig := &oidc.Config{ + InsecureSkipSignatureCheck: true, + SkipClientIDCheck: true, + } + middleware := getOIDCMiddleware(kubeClientset, minIOAdminClient, issuer, subject, groups, oidcConfig) if middleware == nil { t.Errorf("expected middleware to be non-nil") } - // Create a new Gin context - gin.SetMode(gin.TestMode) - w := httptest.NewRecorder() - c, _ := gin.CreateTestContext(w) - - // Test the middleware with an invalid token - c.Request = &http.Request{ - Header: http.Header{ - "Authorization": []string{"Bearer invalid-token"}, + scenarios := []struct { + token string + code int + name string + }{ + { + name: "invalid-token", + token: "invalid-token", + code: http.StatusUnauthorized, + }, + { + name: "valid-token", + token: GetToken(issuer, subject), + code: http.StatusOK, }, } - middleware(c) - if c.Writer.Status() != http.StatusUnauthorized { - t.Errorf("expected status to be %v, got %v", http.StatusUnauthorized, c.Writer.Status()) + for _, s := range scenarios { + t.Run(s.name, func(t *testing.T) { + // Create a new Gin context + gin.SetMode(gin.TestMode) + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) + + // Test the middleware with an invalid token + c.Request = &http.Request{ + Header: http.Header{ + "Authorization": []string{"Bearer " + s.token}, + }, + } + middleware(c) + if c.Writer.Status() != s.code { + t.Errorf("expected status to be %v, got %v", s.code, c.Writer.Status()) + } + }) } } + +func GetToken(issuer string, subject string) string { + claims := jwt.MapClaims{ + "iss": issuer, + "sub": subject, + "exp": time.Now().Add(1 * time.Hour).Unix(), + "iat": time.Now().Unix(), + } + token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims) + privateKey, _ := rsa.GenerateKey(rand.Reader, 1024) + rawToken, _ := token.SignedString(privateKey) + return rawToken +} From d6c62e42551b9318a3f89c9c83795ac28bb13a06 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 11:17:59 +0100 Subject: [PATCH 077/106] Improve tests --- pkg/types/expose_test.go | 140 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go index e0185f09..69bab5b3 100644 --- a/pkg/types/expose_test.go +++ b/pkg/types/expose_test.go @@ -22,6 +22,7 @@ import ( appsv1 "k8s.io/api/apps/v1" autoscalingv1 "k8s.io/api/autoscaling/v1" corev1 "k8s.io/api/core/v1" + netv1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" testclient "k8s.io/client-go/kubernetes/fake" @@ -229,3 +230,142 @@ func TestHortizontalAutoScaleSpec(t *testing.T) { t.Errorf("Expected target cpu 40 but got %d", res.Spec.TargetCPUUtilizationPercentage) } } + +func TestListIngress(t *testing.T) { + + K8sObjects := []runtime.Object{ + &netv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-ing", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + _, err := listIngress(kubeClientset, cfg) + + if err != nil { + t.Errorf("Error listing ingresses: %v", err) + } +} + +func TestUpdateIngress(t *testing.T) { + + K8sObjects := []runtime.Object{ + &netv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-ing", + Namespace: "namespace", + }, + }, + } + + service := Service{ + Name: "service", + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + err := updateIngress(service, kubeClientset, cfg) + + if err != nil { + t.Errorf("Error updating ingress: %v", err) + } +} + +func TestDeleteIngress(t *testing.T) { + + K8sObjects := []runtime.Object{ + &netv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-ing", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + err := deleteIngress("service-ing", kubeClientset, cfg) + + if err != nil { + t.Errorf("Error deleting ingress: %v", err) + } +} + +func TestUpdateSecret(t *testing.T) { + + K8sObjects := []runtime.Object{ + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-auth-expose", + Namespace: "namespace", + }, + }, + } + service := Service{ + Name: "service", + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + err := updateSecret(service, kubeClientset, cfg) + + if err != nil { + t.Errorf("Error updating secret: %v", err) + } +} + +func TestDeleteSecret(t *testing.T) { + + K8sObjects := []runtime.Object{ + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-auth-expose", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + err := deleteSecret("service", kubeClientset, cfg) + + if err != nil { + t.Errorf("Error deleting secret: %v", err) + } +} + +func TestExistsSecret(t *testing.T) { + + K8sObjects := []runtime.Object{ + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "service-auth-expose", + Namespace: "namespace", + }, + }, + } + + kubeClientset := testclient.NewSimpleClientset(K8sObjects...) + cfg := &Config{ServicesNamespace: "namespace"} + + exists := existsSecret("service", kubeClientset, cfg) + + if exists != true { + t.Errorf("Expected secret to exist but got %v", exists) + } + + notexists := existsSecret("service1", kubeClientset, cfg) + + if notexists != false { + t.Errorf("Expected secret not to exist but got %v", notexists) + } +} From eca143630084eb6006f8bca12b076aff98b621fb Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 12:14:47 +0100 Subject: [PATCH 078/106] Remove testify --- go.sum | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/go.sum b/go.sum index 3ef351e8..0fadf17e 100644 --- a/go.sum +++ b/go.sum @@ -153,7 +153,6 @@ github.com/grycap/cdmi-client-go v0.1.1/go.mod h1:ZqWeQS3YBJVXxg3HOIkAu1MLNJ4+7s github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -277,16 +276,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= From 744e9ce146f6d85c38ca71ee7a918bf87d262d23 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 12:35:31 +0100 Subject: [PATCH 079/106] Add SQA tests --- .github/workflows/sqaaas.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/sqaaas.yaml diff --git a/.github/workflows/sqaaas.yaml b/.github/workflows/sqaaas.yaml new file mode 100644 index 00000000..6ff56821 --- /dev/null +++ b/.github/workflows/sqaaas.yaml @@ -0,0 +1,24 @@ +name: SQAaaS IM + +on: + push: + branches: ["sqa"] + tags: + - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 +jobs: + + sqaaas_job: + runs-on: ubuntu-latest + steps: + - name: Add tox unit test step definition for a SQAaaS assessment + uses: eosc-synergy/sqaaas-step-action@v1 + id: tox_unit_test + with: + container: "golang:1.21.4-alpine3.18" + tool: commands + commands: go test ./... -v + + - name: SQAaaS assessment step + uses: eosc-synergy/sqaaas-assessment-action@v2 + with: + qc_uni_steps: tox_unit_test From 2134aaac6a1ff86bc1934ecc9033165e89e412d2 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 12:38:39 +0100 Subject: [PATCH 080/106] Add SQA tests --- .github/workflows/sqaaas.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/sqaaas.yaml b/.github/workflows/sqaaas.yaml index 6ff56821..5d5ab8c8 100644 --- a/.github/workflows/sqaaas.yaml +++ b/.github/workflows/sqaaas.yaml @@ -12,13 +12,13 @@ jobs: steps: - name: Add tox unit test step definition for a SQAaaS assessment uses: eosc-synergy/sqaaas-step-action@v1 - id: tox_unit_test + id: go_unit_test with: container: "golang:1.21.4-alpine3.18" tool: commands - commands: go test ./... -v + commands: "go test ./... -v" - name: SQAaaS assessment step uses: eosc-synergy/sqaaas-assessment-action@v2 with: - qc_uni_steps: tox_unit_test + qc_uni_steps: go_unit_test From 602c813e60df93f9ae8fcbdb59015c3d1cdbb47b Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 12:43:44 +0100 Subject: [PATCH 081/106] Add SQA tests --- .github/workflows/sqaaas.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sqaaas.yaml b/.github/workflows/sqaaas.yaml index 5d5ab8c8..42a7bad3 100644 --- a/.github/workflows/sqaaas.yaml +++ b/.github/workflows/sqaaas.yaml @@ -14,6 +14,7 @@ jobs: uses: eosc-synergy/sqaaas-step-action@v1 id: go_unit_test with: + name: go_unit_test container: "golang:1.21.4-alpine3.18" tool: commands commands: "go test ./... -v" From a3cd62f02db523c29452bd77657b3792f0bd660d Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 12:45:17 +0100 Subject: [PATCH 082/106] Add SQA tests --- .github/workflows/sqaaas.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sqaaas.yaml b/.github/workflows/sqaaas.yaml index 42a7bad3..9813070f 100644 --- a/.github/workflows/sqaaas.yaml +++ b/.github/workflows/sqaaas.yaml @@ -1,4 +1,4 @@ -name: SQAaaS IM +name: SQAaaS OSCAR on: push: From e1616827764a616204067294cdd44cd7646e80a7 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Fri, 22 Nov 2024 13:19:52 +0100 Subject: [PATCH 083/106] Update actions --- .github/workflows/tests.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 3017a1ad..9d0cb12f 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -8,10 +8,10 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: go-version: '1.21' From dc1f7ef59914bb651c22941a25daed3765ef8f94 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 22 Nov 2024 13:32:17 +0100 Subject: [PATCH 084/106] Create event depending on delegation level --- pkg/resourcemanager/delegate.go | 59 +++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 30eb1e47..a47d878c 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -430,13 +430,19 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error } fmt.Println("Event : ", event) - delegatedEvent := WrapEvent(service.ClusterID, event) + /*delegatedEvent := WrapEvent(service.ClusterID, event) eventJSON, err := json.Marshal(delegatedEvent) - if err != nil { return fmt.Errorf("error marshalling delegated event: %v", err) } + */ + + storage_provider := service.ClusterID + //Create event depending on delegation level + eventJSON := eventBuild(event, storage_provider) + + fmt.Println(string(eventJSON)) for _, replica := range service.Replicas { // Manage if replica.Type is "oscar" and have the capacity to receive a service @@ -931,3 +937,52 @@ func createParameters(results [][]float64, duration time.Duration, clusterStatus } return results } + +func eventBuild(event, storage_provider string) []byte { + + var eventMap map[string]interface{} + err := json.Unmarshal([]byte(event), &eventMap) + if err != nil { + fmt.Println("Error to read the event:", err) + return nil + } + fmt.Println(len(eventMap)) + var eventJSON []byte + if storage, exists := eventMap["storage_provider"]; exists { + fmt.Println("The 'storage_provider' field exists in the event ") + eventValue := eventMap["event"] + eventString, _ := json.Marshal(eventValue) + + delegatedEvent1 := WrapEvent(storage.(string), string(eventString)) + fmt.Println("New DelegatedEvent:", delegatedEvent1) + + k, err1 := json.Marshal(delegatedEvent1) + + //k, err1 := json.Marshal(event) + if err1 != nil { + fmt.Printf("error marshalling delegated event: %v ", err1) + return nil + } + //k := []byte(event) + //k := bytes.NewBuffer(event) + eventJSON = k + + } else { + fmt.Println("The 'storage_provider' field does NOT exist in the event") + //storage := "oscar_provider" + //eventValue, _ = eventMap["event"] + //fmt.Println(eventValue) + delegatedEvent := WrapEvent(storage_provider, event) + fmt.Println("New DelegatedEvent:", delegatedEvent) + + z, err2 := json.Marshal(delegatedEvent) + if err2 != nil { + fmt.Printf("error marshalling delegated event: %v", err2) + return nil + } + eventJSON = z + } + + //fmt.Println(string(eventJson)) + return eventJSON +} From 7ad4c831c95cc949252c68a24de9725a217159a3 Mon Sep 17 00:00:00 2001 From: Miguel Caballer Date: Mon, 25 Nov 2024 08:50:30 +0100 Subject: [PATCH 085/106] Revert "Merge branch 'master' into dev-vicente" This reverts commit 79ed3b62932692417b2083b82d8d103542ad250d, reversing changes made to dc1f7ef59914bb651c22941a25daed3765ef8f94. --- .github/ISSUE_TEMPLATE/bug_report.md | 3 +- CODE_OF_CONDUCT.md | 25 +- README.md | 4 +- deploy/ansible/README.md | 2 +- docs/api.md | 4 - docs/api.yaml | 15 +- docs/images/bucket-list.png | Bin 176109 -> 0 bytes docs/images/minio-ui.png | Bin 533761 -> 0 bytes docs/images/oidc/egi-checkin-token-portal.png | Bin 87620 -> 0 bytes docs/images/oscar-info.png | Bin 309170 -> 0 bytes docs/integration-egi.md | 16 +- docs/invoking-async.md | 8 +- docs/invoking-sync.md | 4 +- docs/invoking.md | 13 +- docs/minio-usage.md | 50 --- docs/oscar-service.md | 12 +- .../plant-classification-theano/README.md | 2 +- .../script.sh | 2 +- examples/yolov8/README.md | 24 -- examples/yolov8/img/cat.jpg | Bin 22672 -> 0 bytes examples/yolov8/img/cat.jpg:Zone.Identifier | 4 - examples/yolov8/script.sh | 8 - examples/yolov8/yolov8.yaml | 17 - go.mod | 2 - go.sum | 18 +- main.go | 4 +- mkdocs.yml | 3 +- pkg/backends/fake.go | 10 +- pkg/backends/k8s.go | 56 +-- pkg/backends/k8s_test.go | 38 ++ pkg/backends/knative.go | 31 +- pkg/backends/knative_test.go | 11 + pkg/backends/openfaas.go | 26 +- pkg/backends/openfaas_test.go | 326 --------------- pkg/backends/serverlessbackend_test.go | 65 --- pkg/handlers/config_test.go | 165 -------- pkg/handlers/create.go | 23 +- pkg/handlers/create_test.go | 123 ------ pkg/handlers/delete_test.go | 102 ----- pkg/handlers/health_test.go | 50 --- pkg/handlers/job.go | 141 ++----- pkg/handlers/job_test.go | 44 --- pkg/handlers/list.go | 11 +- pkg/handlers/logs.go | 10 +- pkg/handlers/logs_test.go | 234 ----------- pkg/handlers/run.go | 47 +-- pkg/handlers/run_test.go | 8 +- pkg/handlers/status.go | 2 +- pkg/handlers/status_test.go | 132 ------- pkg/handlers/update.go | 48 ++- pkg/handlers/update_test.go | 114 ------ pkg/imagepuller/daemonset.go | 4 +- pkg/imagepuller/daemonset_test.go | 74 ---- pkg/resourcemanager/delegate_test.go | 204 ---------- pkg/resourcemanager/rescheduler_test.go | 193 --------- pkg/types/config.go | 6 +- pkg/types/expose.go | 25 +- pkg/types/expose_test.go | 371 ------------------ pkg/types/interlink.go | 101 ----- pkg/types/interlink_test.go | 120 ------ pkg/types/mount.go | 2 + pkg/types/mount_test.go | 157 -------- pkg/types/replica_test.go | 69 ---- pkg/types/service.go | 26 +- pkg/utils/auth/auth.go | 51 +-- pkg/utils/auth/auth_test.go | 145 ------- pkg/utils/auth/multitenancy.go | 4 +- pkg/utils/auth/multitenancy_test.go | 149 ------- pkg/utils/auth/oidc.go | 44 +-- pkg/utils/auth/oidc_test.go | 219 ----------- pkg/utils/minio_test.go | 123 ------ pkg/utils/of_scaler_test.go | 196 --------- pkg/utils/token_test.go | 49 --- pkg/utils/yunikorn.go | 2 +- pkg/utils/yunikorn_test.go | 122 ------ ui | 2 +- 76 files changed, 286 insertions(+), 4229 deletions(-) delete mode 100644 docs/images/bucket-list.png delete mode 100644 docs/images/minio-ui.png delete mode 100644 docs/images/oidc/egi-checkin-token-portal.png delete mode 100644 docs/images/oscar-info.png delete mode 100644 docs/minio-usage.md delete mode 100644 examples/yolov8/README.md delete mode 100644 examples/yolov8/img/cat.jpg delete mode 100644 examples/yolov8/img/cat.jpg:Zone.Identifier delete mode 100644 examples/yolov8/script.sh delete mode 100644 examples/yolov8/yolov8.yaml delete mode 100644 pkg/backends/openfaas_test.go delete mode 100644 pkg/backends/serverlessbackend_test.go delete mode 100644 pkg/handlers/config_test.go delete mode 100644 pkg/handlers/create_test.go delete mode 100644 pkg/handlers/delete_test.go delete mode 100644 pkg/handlers/health_test.go delete mode 100644 pkg/handlers/job_test.go delete mode 100644 pkg/handlers/logs_test.go delete mode 100644 pkg/handlers/status_test.go delete mode 100644 pkg/handlers/update_test.go delete mode 100644 pkg/imagepuller/daemonset_test.go delete mode 100644 pkg/resourcemanager/delegate_test.go delete mode 100644 pkg/resourcemanager/rescheduler_test.go delete mode 100644 pkg/types/expose_test.go delete mode 100644 pkg/types/interlink.go delete mode 100644 pkg/types/interlink_test.go delete mode 100644 pkg/types/mount_test.go delete mode 100644 pkg/types/replica_test.go delete mode 100644 pkg/utils/auth/auth_test.go delete mode 100644 pkg/utils/auth/multitenancy_test.go delete mode 100644 pkg/utils/auth/oidc_test.go delete mode 100644 pkg/utils/minio_test.go delete mode 100644 pkg/utils/of_scaler_test.go delete mode 100644 pkg/utils/token_test.go delete mode 100644 pkg/utils/yunikorn_test.go diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7dc82a30..29046a7c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -23,5 +23,4 @@ about: Create a report to help us improve ### Possible Solution -Any thoughts as to potential solutions or ideas to go about finding one. -Please include links to any research. +Any thoughts as to potential solutions or ideas to go about finding one. Please include links to any research. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 8323daec..6ae866a2 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,22 +14,19 @@ orientation. Examples of behavior that contributes to creating a positive environment include: -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or - advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities @@ -55,7 +52,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at . All +reported by contacting the project team at products@grycap.upv.es. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. diff --git a/README.md b/README.md index f01c67c9..a3d39b88 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # OSCAR - Open Source Serverless Computing for Data-Processing Applications -[![Go Report Card](https://goreportcard.com/badge/github.com/grycap/oscar/v3)](https://goreportcard.com/report/github.com/grycap/oscar/v3) -[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/8145efdfb9d24af1b5b53e21c6e2df99)](https://app.codacy.com/gh/grycap/oscar/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage) +[![Go Report Card](https://goreportcard.com/badge/github.com/grycap/oscar)](https://goreportcard.com/report/github.com/grycap/oscar) +[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/8145efdfb9d24af1b5b53e21c6e2df99)](https://www.codacy.com/gh/grycap/oscar/dashboard?utm_source=github.com&utm_medium=referral&utm_content=grycap/oscar&utm_campaign=Badge_Coverage) [![tests](https://github.com/grycap/oscar/actions/workflows/tests.yaml/badge.svg?branch=master)](https://github.com/grycap/oscar/actions/workflows/tests.yaml) [![build](https://github.com/grycap/oscar/workflows/build/badge.svg)](https://github.com/grycap/oscar/actions?query=workflow%3Abuild) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/grycap/oscar)](https://github.com/grycap/oscar/pkgs/container/oscar) diff --git a/deploy/ansible/README.md b/deploy/ansible/README.md index bb79f54a..cd10fd90 100644 --- a/deploy/ansible/README.md +++ b/deploy/ansible/README.md @@ -1,3 +1,3 @@ # Ansible playbook to deploy K3s and the OSCAR platform -Please refer to the [docs](https://docs.oscar.grycap.net/deploy-ansible/) for instructions. +Please refer to the [docs](https://docs.oscar.grycap.net/deploy-ansible/) for instructions. \ No newline at end of file diff --git a/docs/api.md b/docs/api.md index 6bef9b69..07afb9af 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4,8 +4,4 @@ OSCAR exposes a secure REST API available at the Kubernetes master's node IP through an Ingress Controller. This API has been described following the [OpenAPI Specification](https://www.openapis.org/) and it is available below. -> ℹ️ -> -> The bearer token used to run a service can be either the OSCAR [service access token](invoking-sync.md#service-access-tokens) or the [user's Access Token](integration-egi.md#obtaining-an-access-token) if the OSCAR cluster is integrated with EGI Check-in. - !!swagger api.yaml!! diff --git a/docs/api.yaml b/docs/api.yaml index be36ec1a..90d5be14 100644 --- a/docs/api.yaml +++ b/docs/api.yaml @@ -33,7 +33,6 @@ paths: description: List all created services security: - basicAuth: [] - - token: [] tags: - services post: @@ -51,7 +50,6 @@ paths: description: Create a service security: - basicAuth: [] - - token: [] requestBody: content: application/json: @@ -76,7 +74,6 @@ paths: description: Update a service security: - basicAuth: [] - - token: [] requestBody: content: application/json: @@ -111,7 +108,6 @@ paths: operationId: ReadService security: - basicAuth: [] - - token: [] description: Read a service delete: summary: Delete service @@ -128,7 +124,6 @@ paths: description: Delete a service security: - basicAuth: [] - - token: [] tags: - services '/system/logs/{serviceName}': @@ -162,7 +157,6 @@ paths: operationId: ListJobs security: - basicAuth: [] - - token: [] description: List all jobs with their status delete: summary: Delete jobs @@ -179,7 +173,6 @@ paths: description: Delete all jobs from a service. security: - basicAuth: [] - - token: [] parameters: - schema: type: boolean @@ -221,7 +214,6 @@ paths: description: Get the logs from a job security: - basicAuth: [] - - token: [] parameters: - schema: type: boolean @@ -242,7 +234,6 @@ paths: description: Delete a job security: - basicAuth: [] - - token: [] tags: - logs /system/info: @@ -265,7 +256,6 @@ paths: description: Get system info security: - basicAuth: [] - - token: [] /health: get: summary: Health @@ -326,7 +316,6 @@ paths: description: Get system configuration security: - basicAuth: [] - - token: [] '/run/{serviceName}': parameters: - schema: @@ -618,6 +607,4 @@ servers: - url: 'https://localhost' description: 'Local testing' - url: 'https://inference.cloud.ai4eosc.eu' - description: 'AI4EOSC OSCAR cluster' - - url: 'https://inference-walton.cloud.imagine-ai.eu' - description: 'iMagine OSCAR cluster' \ No newline at end of file + description: 'AI4EOSC OSCAR cluster' \ No newline at end of file diff --git a/docs/images/bucket-list.png b/docs/images/bucket-list.png deleted file mode 100644 index dba9aa469b2a3b9b0b3f45f2a5ffa8adbbe1b4c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176109 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 VIvqU&YTGINu+Q;(;vV0me+T8k0ww?e diff --git a/docs/images/minio-ui.png b/docs/images/minio-ui.png deleted file mode 100644 index f90d710aba86ef80582fdc08487617a517343a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533761 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
vcu(x_DRnkmrtAf(HMYt3$U+uZS`#{W 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%0An%F_ngi-BOI~cK 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%0DF4L?zq2cp53s>T|ip%8Ptw?sZD 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®@GO-u_3DQN>q0S0LsFJ^oV1`>u0G=?zBeRIer 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 z�lc9W0%z|4W+*ZpHesKgdatqN{IcFgI(DCUbx4BMPB3jV!GR!lEZo;}G|YZF)Ne zu#K;`hO0&F!KQyvnzbX_Xo#96cxlGi8O-6M$6eN5nd|mGrT_4V_y-~|m1@dX;Hfhc z`}+CTk=Jhh#TJQ?e@TZySi-X3w;fDTU5WR0l;3yGDBA#|MeG;Ua8by7zrI|G5XBKnx;)Azx^Oob`4@{Qx%~tbrsGPm?*4#CcsYgRpv&vHr zRUTVG=liUK?(q-J-(yLA4Ju6O@h{P?9_QKoJ@sk=VjUqG15@aaO;Pq>W#f|uUrFfZ zwgVD>trMd)YuZk-Lrx$odH&DkDA3hq504Wo0*FzIpMFWUg)jEvTJynfur9G<`)MXr zI)n7X4OzPKbZTy8OxCIWQzJS5IzoLNbpLaO2UbGG#(I4JHWk+C8T<1k=EH^fQ(Jv- zX?N}k)t!-dTAqEbcAh@d`jz)-^YT06OLq2lKEB5AhxD6xYn)tj%c)IDfaN6vES8Er!fEN}aQf>J%WiEIaT9_EArS#4v{sN2Lw~2?p zZ|RUB)||kPQl1Ge4Ke4wIh#4|eD@k>Vp8W!5dTL6S&1b^#&E>wzC=l)Ix}slXB^#H zsB~bLq_`?=T)yV}Y(|$%#!bx7Q>3pjW6z4{(s~QWBx5>hwgg&$Ze92K^_sKKYoyDp zSQ8BAgV%bGIoPzpW5PN^E}Coh2=v$ z;4ba(oO&g(&l^Cz8OFT1WQ6sdQ?}U(BN^b_c%BY+_&n+_vH0LyC;r)R$QHgrK9XY6 ziXFbdnZqM6adS@Gr4AMk9(tcK^nOZOk`CoT`$tA%f>G--(?uX){Vu0{6LRCVH(oK7 zV6aMt}y%1O1zN**{(DH@ZYMmCb2j zn&usLmmb;!tk9n7O9_WD^~@28 zKQF$bc)BI7KSMgSxcG1-lol>9Kzlt%iy^@9O|Ueish*>^V8P`Yuxt}_Mj4i^xN(e1 zmuK4NyS#;&JV0JqVTGYtEz^iYw5y+z)!iTNXef5^gFb|HjV(x9T0 zl9=&%wy(glHG3IV-VqU2;wXB^+84u`lBN>JHqm?zLm`#ERLZ4=(l;9toYbu(oV=sq z6^2cAcoZH>KT`@?R?2+$BMU`vxC+3=as*YM`NflKN0PZ3DP~ zum6m^JVteHcQQxybr!lPQaz=c4W2!lS!o(rTj zk;!SOG$mp|IeOf5W9f6wU~$;|;(gDG=*Mc2vHJsopjM$u*#La@YUIYmr9$u4-ix`i zR%7F$jdM*GUyUe127Kqs59MV?P*f6H>^urR__|d3SO6`|Xe47nWUwuw#hev2of@|0zBY;Qcy=X}%cjc9OU*DKhxh-rZY9e~bA zdoQQCtMd|{fUavK7E#d9Ps!m*5LC~_a%_1P)&=|ea-d)1LY}5ngX_|5_x@Ak)iOR+ zl7&0HvV!yp-)uZf3q;-4ZMyqNVyw zz!OJ@6HZ>vuAceV+pcM@O?k3WqdVu9H*lNA#~}8{KP%&6Y{FK5SvUWezOzR~ajE>x zHynJ&FU1~d5MrDkMN0oDjyCUqvO_)RwT)F##6YACi{H8_sq2D}=eY)-dk}>pK|5o< zynHdPW=HfcfRil>N|dij94eYnCPr!-1UZY7pO|v+IT{Sfmp<( zNWF$heH?H1w-@MT~Q|W@m4ZG$%6$I8UfJ(Z< zVFtQSmOj?z2*IB@g~ns-w9!Qxw3!Pq@zLC#_$;%1ma+r8{(;?$jNT@~g-yO6uUv@3 z4^~nb&t`dymR6Ph+^L5v`Vj;kt2kr?ZSdeM=fnqE7~xE^!LvUdof`XcGUV&BGvS#K zLC4;o8cz9IBom%jmsWX7D*t$wMfmcb&H8psmjbc7Sxo^dwm=f17^QTbtr;J%yUiv# zt_|x(*`lljF5sE|`62FETF#%B-CKCw4KXL#@)ATYaI zx(PMzzKnTvYCkf1H!>S`gN^q(UAu1U7ea#tQ(LtLcmTWyjj_0E4$;Yc@v2hVNwm2} z()3mSSwB-Z`23-HYW@t#A4C2X6+4{-gT)=YlALz-uwzhqOI7{jS8f`kVZxa0#gZhD z##rq`;iN}@3jIG$(7!@ve){njnK>Gh3+}*AI$91;37p}hs9$^ydxX@woK4Q9?L$>2 z7s?69b)(9Q88S1-Y<$hN#m8}oXG56bpsd-cu;LR(wqn^fnG$37$~D`4OAFcV5X}X? zIzFp398oQko7=i4{{Dk~_n_+Q?>X6WqIgnKqjj_?v2W!mGStgyf`xZfj;E>pma)FU z6Yim+*3uYE))6(pe`u3N^a~>*Keli$M&WH!a?K5Y5hLZW=wQQ zWK!+3wkFCDR0|=atZ`svuLU>veP>mgTlsmebVzp0M^H+8yt2aJn`Js9ZR4Z5B`w|sSy+Abs5TUo z13M3F=B%7v{x(|L)M}KYKTGEJ9yW+9jruX#-8n!L+`Wk=CxRBbY#CQSNO4rv@j1SLw0+172R?aIuvuWKN{@{i2YHS7W)ra=7C|*g{nZY;!pc)B$|Jojc zK6Hl1Zh1DHdbj#flQ#VA1%Sn%#sQkNx%?E@yyQDwrov$m$5GXDt!5SJj2I48C(fpH z9kgLo^X!Vek7e4`s0%t7A93WuP52cIrJX$Ws4j$5^6)h*@wHpx0g~9?0p#Wgy?EP~ zG~+DM?yWzGLkzYsPWT66NACb$Gmlko>eLoDZh11D4J&#E(F+=6ChG1)3+aB*o6aGS zt~OW(ggz~(HV9>X1WMcQPyZ?|#A`leC|p~LSlr*XA8p_ZD)E@-L)u@9Ggz&!*Ra4K zM{z!?8=Lbal0e@sDOxqf5a#|)XV)Zst9E^2h@kGp)~o1mNG<5~q5sDRY4NEpg>*9L zuTfN0>@!}h)APS@xTZfZ#aBD8cy@+%!^P>ukBhQ_%W(gty?=B`goYe)KBULD|6Va= z`H7#po#ck@sH`EY(Wx$lfODp}C8;2y`$79&rxUsN68qaUHnc_F;h0=QJC`P}Tewvq z(-c`Ql$ead`u$#>_?{F#woOc!((DOATL%#-kjToxNcH0874>=ftY-=W7*x~pn;2&LHhr*Y6Y|8vr)wyqtS56p8R@faDXrs(r zdH?-qigRaFx6@SYY>GD)NPWPHVaHWFOAN0Fu)F3d0S+-_O&BB`+!^+MkQ8Zu!Pb(O zRHiv(=Z~{bHt0?vQ)iSCm+c(y%_F}Ng%a*(i4A>dsgMbE@EAmO5%~HV< zUsEtC+cs4J5N^+=tg{K1B0BmbR*w+D(WS|Qg;85IvTY`>UM_h$H#o*6+;^OI*A-7e zRwL^v+q=!^*)3q!R*+;0MoKznM(LC-sB4|YAP=N&a;UBfr2qk z2mI*mAqIM!&1AZipxQVhiaM%R2u_x%n~cQU^{wVe`OoC3r%#nJm3D_e*w;d_KaQdn z)_VTb>YclrPRMqz{bFMYONs=UB)4l-xGVO1+ua0h_FKcpwmV);u=UOntTrq594)od z!$H-p*noV!3^K1^COFPuyg{xEOp-9`){F(nSOf>&?*9~zf!QC7nUM6*a{yV?!p?K3 z+SA+j_f_0{rRdK&xvOZVy!~*wmhCpmqG5*JFlHHl$7AYQ6u&eF-MEM5+M*+e#W_++ z$YS@$pd3%z)fXx+qt#B_uDAoE;1fSrKjfh-doSmH(*zB*SHWztyu=nn7qk$v|ycLAP#9V1f9!voU_?Gh#((LD1` zH5!@_3GClBcB0?EH^To|8~$lpHT-Ypxe_Jnze*v+rJlwV>`rl*MdU{uUe&tHR*Cj$ zOc;+MMXypkzi!jcZZcY_Gi_bap7-JiEWt++n@@d=A%j;j)!)?8i!_;Yz8;U7qm8bvyW0fJBR)x0u5r%dPZjniNvw2nqf_;*!Y_4(1hI4bB^cM3F?E%X{ zHhUrio>DP}Ud4)OoKf73*{BgVwsl!zDbqGnqp@mcUL{{ZfI)$Ao*`pCWcmHj`oyyTzF~ol7dN#F())+IWvu!cj zA=IHa^v5h7bl)+rtoSV|=kS^c}Qksno3R{=&wYz!*1OCzvS^t79-3B{Ue@~qKql`<;A*$j5)Dn4(Z169$U?VA3OtMkl);_CL zyq@#a6)s%;B>Oshm8GdMTvTn@qSy9%4%*e6v8mzMNOffl=3Po3>Ub1l$VX@#C&5~y z%|oW*`_YvEQ9W+^Ozf*8MET1)O+MY5U%pwC1!~|w>TWJ$on=`truc?3SrdVBk0mYA z>OTSan;XFn^9e0R!7PEUccVGkj;dAF4`7$4mk*1(e%B$8!YR(QLKpi023LD!Pq(jE z?Q^}iM?-en3ir@gi#o=o;R8vfkrZb-;UKCF=qeC1rl;rd)3%jZBU7RhJj}_lUk|ic zgS$t}Y+iT+gd>h9pr@$ld6^VT;DAorskOT<6rd?<5&p5COc9=Xq52?dgqn(r0fplM@lk!&Xs$`oMEDM z0P)XjqSYEI1!2htv*j1fqlHscAV`z1BCm;7Sty&x!Q-Ei>Hq_9rrMsHTmh>xy6Q@C zGX*TyRIAq5m+=Z(aph!;=^@ny{zSr9S4T2;swZG0 zTDusb$7-wFc=)j69p&^`U<`afZR~?7<$phToi?-+8vddhz7=Yjsn7PAswF`y0)pys z>hn(zd@ic^RS~uz9a&+ljmV~P1JNxrBRN)FP8)2tUc~R7?HE#=R2}vjfKh)HxmiUJ zfRPHgSvRpi=`ehY{M&PsO<;Dh+CWgmLdnK1IKem2t==Zy^vbd~*3BAfSRq~ZV4wL> zb6loLL8U-TqIUIoUGI-cs$OJQt(QhU06 z_Z$W{-G2=Sfs=W&F(U{FgdscUK98iM*4-yJ>o-0vdkXY9RK0rKB&}j!N3sOLiG|a`PFZ%mIthO&t~+eEw!tce z^nIx$?`HD2n@!jp(Pdj6R6k)^h=y1HcIC^UO&PWuzX}k`VcX4quNb*|y@B<&amAR1 z=rueFAuT)G+SRp2S4?X{q|G?z9&J;wxqYwF@x{wp$IkP)LWN%{DR#mQ``cm{mW9~2I@Q5U7-1%H52a~5ea3OB>i1f_qr7FG=E{Zn zX0&vAF|3o{Mh6|-FM-pOJ)X?VgxwHE99#p!cv-b8J{F!$icgI>D2yqTr1`a=7DEu- z;Sxv7(%tugMFu%(n`x=Ndb}QQP|178!19@zFP}s$Dw5QodWP3|&gS%rzXy@?l+&^d zak0>2slFD@o*Y6nfb^`-eQz3klXUH-1(x^tW|^VAGtWA^)^#0L@;!af@;mPgd(y{t z-AO+2jK`uCx+^l7)v~L!!g^l6K;}4I?1mNbbRn5#kz)=GC*y^Q-{mi2Fr(?_gj>b- zot8_gn}nzDEjD4LF%3Hoz_zJI>RFufxEx3i2wV&NUc!2#KK#Mi?|G5LU=BVt!ECuy zHhMSnwv<0k#m|;%OAiio_HIc2a?;;{W&FWQ1y?OUeR4SOQ>&+JyG1Wv1;WPJ+C760 zM=-6M6}7Xe|9f%xe-R&@pAtKFu>j)qZ{U;{1Jj8vyml)3G?dG8Yc-TJ+Z#v~ibu>n zIXsQDE-^_My>&32;2Xrv!>bD~NB^!)`py2kNs&kJ^1$pB(=?%6eOVzfYD2E*nEt0n zLkpFk*iH3K0awjL%%MVOeC(w=>dXf4y)cI-^r#qdI7AebTc1BqL7a}PYyuwjp(K5V zAX}%?!aKuTL+UqPqbJltUKd;g^+y($G0CnZx7h_j{xTYBZQ7BbBC0zYdbk@m;bUUN zKVH87b(^RAuifzgqtCe@s~HBu^w^&>rR8?s1ZQBMmHgz$V=GTIhvF>yNk-;*=DVJV z>>^?p@b@qE7g=Y?jE$vIhWL|tslTx%^RRSTadD35m<{O~(Kr>SRooQGJ@JYZiV|S< zc&)%Q9fhVmL%1V@6MMb@W}i3BFz=B5jzx))M!;oSJ*XIF2ps5Rq<^H(-)4PhH)BWN zZl4E_>jtu#+qGSPVKZ7%&S#rtY#=zBhcL33$knx(K)HQ|?K2H!K9ORy1f~jelFV=& ze9RiDP~)4e6^w$}mqz*exQjQMw)@`CYJnn3taIuy=q;qGt@;HmzBceBlhDz!;^xhI zI`Z|fOnz!xtq0CE>zB^;Pg2^8L%)5>8mQyR-0?CDtW4_15?_n}C6mUv=x(Ct69hM~ zr5@m(^o=_{+PPqI3~4~SoAoOJ*5t;>ajF}@7RsMj9fhVViGU;dgfI=$BcY0S%>Oy4 zv)bSBkPruBX@(y*2kqTFTXPn$Zz<>VNF2Z3+{I&uLl)oK0M)0WUAFQ6 zucrII%f4$+stH~H<)s2~h;$vllmH$L(J85N-~nmEvmuycF4PX#p`GLf?^Eswrf~B= z#14joa(3&dy*NUciFzzhQot1~Q1%R?)AFN_=sR#_T8)bed=-^PE<QNYNKPR@y#BI_~F1& z-P?37y9Ln-jn{PxI^d{I-;d2SU4IXn!3$>B8+ zW9w0IhaadJq=i<=qu!gpd`s7yg}~jFy459b@MUwU?ntSct0K+a@-{l59vdFQj8Uk0 zn%J^n4M(oRx{Y)kCwi=+7kt$Bo*T1{_tT}zGP7Gq$AV60Y}#sPM8kTo?VHlZR3NhuboN zGo8J9ZpZ}-xbT-S%$|@d55e&DR018WZm&{qM3uDBn9bOU&@=@%Zc4IVpGuEKqk;)i zsmn(>8wrd~VWN{lXRNQ7C_PFoct55^MwMBLK9l;w{&RqwS}m=TWt&X0CF@kP$_7xy z4_8OSF$9_ZHD;_!Zo`Os<4DG~$x7v+R=Jc0r{(evRw`uCak`UWu-=sB!r#L1!}CwO z(B_>mPs(7vD0pj|L%~?*fzT=_RcQL!;??g^u6+~vZ;|As7m;`Z!KIU=z)I0?qM>i)h zy%UcS@(?WbkgQQG6wYPMNN}7Ig={S?{ZS(TfcHkNnMR500#-ExkA|Emf-=$eo^4Lr z+BX}I-H#ed-S|JtAxmO?LF~-rmQ}2Ch}j((5d_8@fe-zb_vG}_n*=T%U#@1p9Tz`0 z$>Okah+|z;!jt9Pef^onb!<=ns-lfqPcNVJJ&okXBDYmdi`UWP;y4E0o2%(@Vf5ji z4%3Daj?#Nt@Csun@N5_?KN`XVynp!(8|AJXDqJtxZqUO)^G{s+I@`{*)%d5M9u{T z(vV5g;1t5{994*B@4IQ<|M)sE@XhwI`>-p6jJJ30#QG9$o8`}3c!L`M;(xoeRXVBL zA%%H9zG=*{8#oF-85qSIOvhHY5}pvK-nh%)OFP3I(+o)HrIo20WmsDHYMvrqNxcpj zhHRe(s!PA#h4LJbP8AapegtX}Wn}(_ZLwG)|8~HLWXKpLo=knshVwEHJ4D91$9aI7 zdQeEES{E1d4W3zuw$DHcR!Vu9WQ|r}yzVcnFO@l>v;AWxEw4><+--f3nkl6E*Wb>2 zz*qv?>4TM9bWg>fopGP<)fzZ*^s3_Zeip}vy*8Mo4lswJI<0VWHxs<)X&y34={`iO zcsj4VL)RtXDl*MS=SEf&(Y)osCVlB=ol0EEOUSyemAQ#7ZCpNurV2D;xMhH64N9Ku z5-Yxq&k-M`JwR0-QD;Qo@_QalwyeZlz2g`y zgQ0&DS5iK#@a^V$i`)mO32Lg)(0gkowqlER>|v@Sj=(R%E}sFV>(j}Uf*&HhhFVzj znUCHrnzet$NI0#+XT*Q;B13RG(^->yWcdCZh#rgvk@oj<*HgaST;cwHrDN@fZxGsGmWWm& z@-h;%I(qmMcDL+o&HT@YTAlZ$kw5qs3pBD%XtJz$Nt3oBG;{Y$Qw9N7q1K-}`)uJ) zls|WP8QYnp{F7WuDeICUL7|Nc`g*~k5Iomgg!69*hDI4%*io|BF(I6S+;JuQf+OrK zW@dK875j!fML?^nE;|!_lir6Rl36YTAAPQ32R+j(P7D)H-%`{wUI&t2IN=MzaasB$ z{gpDwPt1x?ff|gU-yg!La{366q)-oqulTOBMB;MXt(@Bf&^w+tbspBo=g#aYicyGBk7*dajif ze%1>drekucn;oVb0D4O{xUr+4v`88kZPBa8!Kp$dc$Dpxp}AY;dqGfjj`DGN9 zH5G33 zJs)Dyo#mPb=i>`68vZP1(w z*sxKLte?z_`CGQfD*5JhsV>S$^EU2QNI1}XnwJZj{>=d!Pl5rl*o-*2>eZDwHr7RV z_J>(OG$%Hvbok&-kFJhNO(HR%mh%$8(=&IxgnKw5@;j$8b`8W&H{tn!0Ex@#7B&$Y zYal%9C7g4)J!g#u?WG#yFSA7&MiY(hWX=2{a*WiELXzlV*r`nI{%SVxo#;vmdn0}% zF@FDw#z5!~pG+`(ZaEMKzu1v`R)$be_j+?Gfl~qu8`OaMZ zL^>{0$b`m%EG@1xO2_;T&H$nwa(@vs)SL>gh6w2dlKBKTF4-y*5=6Q z6)_6@ydU?r8BAk7eDtzu5wVn;*GEfpASeS8FST9}HJpei!6zSbMbsX-YZ>2cYAArD z0>Qm{wd`_w{I2`ch#FMwBtt-TI>pZ&}Z7+0&EnLj7;gBxXV9d;k7RBUE zmDw*Sbo)pAR}!pPN%a1SN$t4gLLPf_%4r!LyjmcGr7ovn?dQQJ+4Ai#A2cLu z#==`@vm}%q5h(F~9w4#6>zj)c1vj(cNcoP{j-gAjl!P{q@Fvt$%YQk^C!~Ic9=73v z3=kjRJlzlY8sGD`7l2y8-(1{YPcGh&q7UrH?y|Yg%tH8iChx0y4f49o8^;*1EwEUY z1+ho_eMf!B(gBWKp&kcchGc2=%aTyvX}py0EG!oOl)(|bXg|YV(ng0S)BVagz#bi= z{*l(d#l-=B!^6v)S6%XQ-;xNPQ*jA5xrOeh`DDzMu5I7ae)Xwd7QOI~kUF|GH=T#? z{U=$?=seMswmK1LRnQ33NAnA`8TvwT-m!a=ign>!l~$D%EHvYiHHIuW4C z$FY^Y!w(h59w+6%jIRryciZUc8esOv)a};~+J^yuSe$J9W8~uVVD?j1eR}Zr=1x3P zKmK2BZxkekeoFHf!CbRlqN)YI8sDwUOMAOn0K@ zd0L_|Q7Yc_2+S5EJ5PruJ6wx7r@S2H=!iqe$>L=!^(|dl70BQ@iKl=Nz?C)fHjRFtVt;Z%CyuH-#>Td+yW?pc^Zqzt7(Kij{rTG& zrt!g%f)*Z`?F+ZM@vj=dr?LjqZ4}dpjdy>t$Lf_*~%64vk=!x zi?HsEm3rmKTAVS?+Bg_BH?(`AaDwee*u=tgT*Gp^(9~>TaO*zaY)u5=+^Ly~6m?wK z4%EUGK~D(bjmGZ$Vq8|c-|t1e;KyXbx+R{dR7uX1>)2RGxAMnmJeKUvL__*vr1`qFDDSiC%LVW2H5(7!7ashyQIxcLs9aeRy%W>LowA_%9j}Pwt^Ov7q`u5%@3w#zs4;q4{u8t)zHU}|xbFyc}=y6IE=!|wo_m)?5#yAHAW zO(Nmx(!VP?>7*s=BkDv9B~ zM1;mb-FkM}KZ}w-YwrK*D^2Ky)HLO8%bN{ez_*&Pvm-0BtjXF$Ta{!pTv;WGeDm!c z{kQjhmWm8GM5`Zj2#p0pW0>NfJ@>UkW(N7&*@zQq_&zuY)e`+##+9UXHsBeTkHn|F zuo0R0`d2&POY}Ya20xXp5SBJ9J4`ZB4aBBubzfUsS>9cp4n>PYJ%#Pzx*yue+quwX zNm6%4?{G~7RN?qs9rsNPb7RG+tet|yg=SWR-%G?9b`Eq-j~^HrK^Ob;<2c{%}rHaxgxDj6K%vnNU>pM$^L=!s{#*+WBU* zpN2kFjSR6X+oU|HVl}B^d6CGpP|~Pqf&s4gYbyy(V!jfg3t0~(2lLT%N8FV5(PsYK z(V<(Ewzg)9jI^WykLU#B*(P7=QQ?$6A*TWg1sr#pwg!Nr70Qhb{>>N4^?H^PHjSop z3qp_VSUNN!-4gjeZOvd1IjS@FMTZ;l!;VTW=Em*>(`)sze%I<3N7W2W}3r>PZyr zw!gfR2p)I9S{v369tcfS1JtdJETVncUot8aZ;MRo_uwvRTqn|VYU{vLxSlb$G$mqF z0!9?#N6?$=P*Qi^58!42I3at#zsCn@S48s=4C5P@f2w~Aot0$Ej47-^=-`I{VWB-D zUma&fGtZ-Arcm}uJHEnfZ;F!A%MH|tTEnb8dj&S&#gd6Vc7QOHKL}o1@k`vUX`_et z_-`NPCv80WE9vCf%0D71KHTLf|D_!aQ2LkqZCVRa68e-}++;DpJzU zi3!}AdG@m#u@{s=fqr*agMRu;Y=xzzOZ|ekQ+$S5*#y_K+vgGec@gb>e)<%jpYAwS zp_g~m2o0)#2CxL;K~&|zP+FlR;ladF@pdymFEqI7oVTv35%5ZEizu}lHwsrN6qW`q zxW~v|vyQHur;G|kY-w>H$}g^^qB<&X^52kfSoH!-GvTbmsvk(nGCSd�UPj^a;-a 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≤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�MmZ}`29OXokakA-X?rzAAMK?%DAHWlhU1JBIw{G%T|Yo=W7Ui zHN=;sMXv62Q+&Q}Ymvw7_A@X;6vI{D>>4|3T^y_Kw5L{3UlW+kap+`Nx zS>%Rx0pz6NB{)FUV}sp8{ZrmyJmBbR@q?1s<>8xC*C!cCChXH`FjV5a8OMwzb5zfh zaW)>q;wh$F2l>-mVOzT0!I_`12WvL6xzRZBCd9$G7IUEoB@07ugq#jv!(@T0l=`Kc zFmn+T@UZz+JW&Djx#Cig_Kub1)>!CAv!&A)eBxe|pn9I5jd@5*D0oz_y>82}4s_%A zWRWsbT2C;~1~`cWKm6d==CagrArA$6&)=F_vt@Y>AeMd~a;Wu;Y`dRl6kJ5XNg|%C_HKRq^e?bFzPUN~VIx>7mvME8cCqeotAuWey{D7It+olGNsirVv84)qlJfb^9|>#L_7dY|KmPi8BQ!dXubd}o7M+mSFI zI3kE?q!U7T(*+}7TJajh0|GNkZ@l`Mp<>mY-K8T;erN8jzup@oV}%DkTyZfKE{>#6 zm)s00ZG3$Mk5+k)=6`_ilRMws*XbMZ$of^#_#$am+7HUI4eF!dBfEmWqKVV_%B7QF2LqP!NO0?_Ggs0QpvGaB7)x%xcdl4=p57csq1 zu=}*Chx0XSJ|`BqGOLFOfNK2=aHph2Zdmla*CxXv%%?B*a8_cpoGh#|^`(klY)uf< zBBr7H0h;ZMRQ%ipBc-M9Me`3uBSOaZB9%xr5xZr-skv6J?;{l9IJo`!tAhjEMI|%c zoos3MlXK&^$Q~lwyefy0)vMY}PcexRLPt-_K}$Oqe|X&B+v2$-6A_;F<7O|TvfC&* zw35&o?DV7}YJbRTdhNfi$wI)Q5zcs>#+G`Q{Z({kihNNvj91=za?n1$f{*jQVm(K* zJ;pPd&Q>oJOmbvMKTFl*K`tm^Jl_#Ve%THpI5S*De3C0%VLXs)%~ zJ74QM1V5e6j6D;Ph|7Iiqu;ZnE%iA%t$>0*RYIzIPhVzEepkJ}zTGqRtVT(bPqdE# zUeb_~tzTi!oO{@N(?rG;iK3%8t0euhn&tZ>n(U(A3(r_nH)D8-{ZkAsR*b+)=t z)k@(;{afBMm($m|R5A52gqfTIk$dL4nc3&q{IWbiQqs<-jtI)qL zWOeCZyan3V-Q1aj2Dz12_OJdQxl?JW|MctCj{V!xz z!N@sJ^c24%TE&Aoe$Ufs?oY6UYPIGQ(WiX1^?2ydUU65_z?4vvIiDd^wz02z?a{43 zS-BBgla<>SP$v*w^*pwN-7~4r)%`Y+c6~yJ_whC^ZK#PRiA9s%6`W}`JR!nK=?-LSO@LXY)GU!S8}vqX_I)J4B* z0zZ%z*Y2q;PkhqZ0|3;QCW#hm&37`jeQp8Tl(=f~il@}e?7otMI6p5T<0uzpPWh}lIMC{SVVb_<>TMYoUq4E!H)sYED&8Ya@E`EGkFXJmuL?9?D z<5+Vv<)Z_oxJN_GnnLusw|n`jF)3GaEZ*mJD52m5rTF@8oU_)&s-DPGKd;FlC=s^& zdyC$bPXlz}=vJ!Jbts53|CPGX{dg@BcwiK5{!-%FX0tkr<=y$tdGo`58Z-2%lbTy| zO=$F#QgrazdQq*WKADT-%e<&k#b$Y}k7HWk=aoka@Im7aE)e1f%*3^YRX=o+zKowU zufC;rucQ(V><*R9Ahww2Gto=<5#CWxpYHb`7B*Q3R_bD;D0Gzi@zBv;CRvDq(vLy+ z?-K5C;INf`ehP;PWv?Gupy$6#x%sN>?wOu;+C?VH*mN&9rzm~H3!keK=kt)Nj_(+N zP4+^bp}sYGB1k!nGUB(>C(om1*hN2c`sthmB(m1p$&=Kz%lj5%Y z-#^|Gsrp>X_{YFYgfxqOt&35vK?0FOf+EBcna%H#WxdqhFQXZuUYqi?zQt*Sn;nNL zaO?M~g*4}FdTI5?Baw)b76-9}(>JujuqZy;_@2)6O9qW;dzs(Ml`g};Y3IZO&dE>3x$(Sng3}uxAX;NAD6cc_Y_NhCA}84! zb5h<{bypbt=Fwji(6u{IprZ29((h?t-#Zaz4Gq1C4-MW4ra zN`4Q9Z-JZl(Eo}S_j{w_EIxJa|>4AG;#07`06MOoFta*_OiJ=tf>ioy%Dfnnq>{E zsieP>PsVbG^ySB=s}g(1-`s&~-LxWZ=5KZ6wyJ2BI&Zh3J?L>bK-k&TBQejhUlbvb zd3_gxqUF*{C;NJ<%2JUffG}EF-!Bvvbsc+upJmcp*X?7oTf0vHB;RaZjfA)X>B1WT8HT@%O`(&VSzP3S$`8L&2i=f@E2L6RDL ze}-|)F*)nefdBdKL2z$7vBK;#C$^nlPqFDP2H7KiFXI13Klanj@En`M*ssqI2}dRb z-SLrW!|O{7NM`PE$;35=N8*+=`TXL8k97tK?X$w}`_3O864F?qBc==SbY4--ZCT== zOaLS3x;GI~7642g(dOL}F=HZg>U%UQh^l8%0?+OS|;9KA)bbj9Qi5sq68g(>Kf$u+x z+{fJJK`4Itz?gkDlUQq%^oE+JyBD+4LTWEDk`yVn^PNy-B-|@5KS!VKzNZi9bwAsR z2DL|9!^fP?v}$WZri&gibc?bN#$=+VvEa!~nSs|2FMv(#QF)Cj%MWYk4^sOqMg$wq zuq9-cDz^#Wf{1`tzck;M$U_T_3G5HkEu|6uE})4+Od#v#2dXzTs}4ezw)-3R;!pVY z$KoF^Zb<0?=w%nTZsMzvB7gYi*voy;NJuRQ;Ufu*4Jx_ywIB5 zACg>tuvbdBDSp*A-zdp8!*_B8%{@>K1YRdP+_ISqvb;jgev~4UBiDGe# zq{E`y*NNJVDYNY@LY~?U4VZ#52j*=D8Rsf~WbYYYWC`~d^%ydx9qv>*?l@Li+|!|IHtEoJjAX%QmN%?3wTs`v=f>l6rF;x(xAK681ye?WD2>pRJCN#gU zT|ImCk_R3vp_?X{(^^t{7mQxaU3fp8wI(5J zqYd#cx6Dcv>h+QsOF*#KIARTC`S#sx49^G1W=uVZgw907TXy05B1c2S9dl0cpqqPs zk4+Cs-pQG>Tl(XTHQPCssQs-&``~bJYpZB@db?!Qq2Q3e@wULCK!n`nctRT7h2uc+ zJ(aN-^U>l+)FwB>$X~vB{_cLY;TiVn2JX~EmYy5<-gBC=&l#$%sq%lwCqk~38OgzX zS$*$EqF!t7--oae$nL7k>e;s#XhiH~_hN&o;O*pMJ?W^^>Ff)?(-|#Ah|o@59)~Dz z3bCrIiqT!stj=fqz1I^%T`)C*dUogCK7D3#!*toGofaq?nSyS6+_0xtbgs~+x z6l^RpAUQMZ{T}+s?Ucmnb+}gPH20`#uTDN-);9->hxT_*tX55;7IFzgsJ&T!Ss(zL zr>eRpVa~HUxt1XyCb1-cynQ58pT7t&%+KCCn++6y^X-L^G4^^=MbtxhN?+8^}6m@b9v(aH1 zW_t46R&w7}5`Z>p!@O8W`~|VRLe|H-c!7zy^&#I$QHr2DA>zFj$%7IKSd;-kNITAO-IIOSQq3|&ZF>fnH9!m@&-&11u#~k)F(9W=T+wiT9=j8 zT+LbTyM8NQQ>NWo$O;A7;G9nD%)f_5J=<>ZfAoo5N6$*^0^GW>|F^TL{{>52Tm&mi z7Y+tK?1`Vc10N5%Hu3}C5Cyc|Q$g>7DURv~YMIRiUEuH4lNO5hiSkx#4dhaKF0|%0 z@XPZoPUT-$;e2iQY*vu4fF_zG=v^EJxlV8{=#TQAajN298ALt58@E!b+zwnymuI3Y zv_Q`C;7DTpAP>V|Ou|07Zf%s0WDY+dr-Wzgl6n@oIk-68oyaI^q;KzZyEUSS*0Z3| zD2~#&tD|)f5>|NXzb`*W74U5SZr{4pb8tv$Fx-Q4l$ooNlGEwJo0YSrMm!2t`}~~l z%A(tns8pt8YUQ)@!VX1GjKe8r-Fv{}wwsB>8B*M_93qxHw!Z@-#JR3=y8$Ms#{ET0g)_^GChOAElFofQ@G(9y6MhV| zHhI#Eu5{CTaXpF}UJ^btNXWS0JZs|D&zZ31sdLkL*v~SP=DFR#FJOq+j znlgolS6Ava$b$6vUD4}K+6p8@R774@OnQ}nccxdYXvzs>4w$SoVOtBJ)EkbtauQnh zOatony|aE~aucaa^KNPE>XY`_>xEVz^GyKu7B_haIxAx@ugGUY zk5klO!DYP8+D-S9lwso1)Lj3PKt1uL?ilBnYWZdBq22_Qoa`yD?gVd30D>M>F``$S z56hj*bNXCq800}<4OJbz?jr;`uPiDJenTyck(L}WN@N){KJV$?$eWd}tykbvNT3&R zu1a6p9Oe-)ixuII#`d$}?I&DW+iUM^_MnP;Ah&LK%tSh~eRFK{>u^BJ@ASZMM4RwU zwG%6_o;6&s2<58XjzlSA)uS6ZN`rrLY`+6PP2S0iKrURP+H99ac8fNfi?cSyE~tFk z*`*;rvuBU>gp6_g5KQ-|=hZ$&RYmR0)^7^d z=<*FL+EwtTjF1rUapEsB_E$Z09OXAc<)y?Dblqv%yDi9+MUe09)&T?#Tk$F+^7$8{ zP9<672s}@{?Z-!qMy5-^)F32F8yk#MN5@ijt)A4Je4?Pc3iOP(O)s04{0ppil-cC% zvTjm|D5ZRKS%z)N5%h+`*_7by%lGr4Dl{o$gtEb3pDzMD_N7^yqNn{S!p-E~m6(t_hXIrgS_V{d z{Q=mn=Ub=xGs_L%)fdioON3;VrX7n@57i(-p@Rd|jLb<2au_p1FoEX6h>6F-U8T(a z)p#vDu%`4{6>{F(J605t#we)(>&xjH7|h{p@$W+R22EFQsz9AYPLI349utBEr+EXb zeTzz0l6&WC!yWZS16rV|6X-9~n?;7cf6r&pj2X?bF z4OPXY86KoI^`qEFuhwefLYD(EOWHFRGL1OiU3glRYZV=aBFwRz%;5yFX8x8M*o}84 zq~xjWnc26Wcui~d(u?4dj!L5`viGHZ84U7?K6VKx#z4^W|f(`d9CJ( zG-~yHB(g5-Spl2_{)XmR+y5y#C^!3~#eZ~vg;lS*y5Lkl*xSONFV`xTMnaYpZR9a3 z`8@5i;Ft(K`9+i%&~Gd>{Dm7=7DAD0U^R$5T~*o!EAd;I9_h78U8;f^mc8 z@|A9%bTttp)|VyIVbewiydBRp+Wla~;DEKasEV6g!~_^RERGt{DHMWSJl{W88)}x( zbZHHV7tSoQIYf?$Z*+wEzr~eGSMSUz5#MrKuMkGCY_l0`n|R6Z{c&EiXe79qQuXAl zIYuQP-bpPIaaNi+X_V65WgVwAZ8#;LlM%VW`D`?8_;73*Uw?hw#E3N#Lls0$K}Hdf ze4}X-6opL47EInGTk6ty`rAcOm2Yf311p_^Jlc*{Y{ZI7W#3^=szO+IHp6aFbBJa_ z({u|98!=Wgb|>wk>oTY&(VPNed+W|h9bjM!I%*kJ%(2jPF>t~HbPhvFR@OS!&Q`fL zF>3h{Llb7sV(gbZ(cv-eZx0l)-SjviM%6p|%5#E71Ne`fY!R~_+?FhgT9L954uZp# z)4F;)9uY)1Mm#L35OGujo^b6fZSn9oQ)qe37*;*`J-3wzG)b$5$LFp)oM5LUR z8gY@usI`!Qm(&8h=&93^MiGWryUO==Gx0(&JpN+}t44o!Y|PTFhZf$P5ls8Y-y|1D zx!v#r&a_bGWn`M2K{A-<`-|qBty0~1c zQ@7(UMRO5zXzw5mAp)cbMyS5|CrfEItK_mkDXmdB>Po=!&|UHlSU z+8Qm&hL=E!%nDkVw3KP9=Z$PiS+xiDzWZ=L@-i}Jt{Do;rm9So#7YG49~*<<)}M4) zDmnSsbfE)*^Cjs;MfrCR3Eyr=Zu#8eZ;CZYt*C>fUDw2Sc7(|b=52|{4gaH+9I%1-Q z*pqsm5tEVBYPA9~$u04Df}S?R)fIkJ2cYVR&)!U&1T39G;#uFdI9Wz3#^;vh%%v!` z;dnJaOmOtbyMz`5JsZO(5p>O>c3)NGAd!%Fy8qtmR2!|DxhhQ|;l#xh&M9@+SAcU2 z-L;xFq8{ny)~s_tiCVTJ^KFT!Hzq#qicKVt+fyUOG%vO+6;o=WkF@heDdFExX?COX z8br2eXe+9YRGZ&Jfy*Ry12IFVyw;}5d+dvKYa!1y z?h6r2LHp_Gy7s`x*q~k=gPU1g`rfE%fTsA9-Frfk#-cqDOkwd}Pmu5~`Rk<>88V(N zk(SNu$a$DDIti~d18VCSWv-vN0b<$FjZmmw4BfxfjQ#Delld(K%&+D1C@y}Z1U>5y zw!iJb`HNq16%jsW?~~}1_rDknFPZxG#^dviT2VouHQN)iHjF{1}f{iJ0) z;3YC+CA@dTwfk>qL@5&BBvyJ}gxkY&7{`5hKvxjFq$j;&dWez5aEXkx#7xV=W-q5Q zpH!3$nVK!d@>H>)C*rHy#Vh>Yf%=Iw`SmtDJ{w@qyn@_Lk;o^&G-74aQv}c_BV%wz zB)}D&_v%ojyS>F+MyECKf_J|^H#6|4=<~Y{;;ijQO@2LotEZsh}!w zF%p?YzdC*m-JG~wG}_yZEwfZ24_ntvd&Lwhy}n~DOcEy%FSe%s8*d6$nE5QDsAJT+ zDdCPYEyoueWaH3%u`}PM@h0pXB_#=-~W{@hJ`{Z!u7W=~msB zNXE#gl>PM5P{zmi7#b)$`mc}l3fdpG&E)iQU)(p69kh|T5(@t*@o@bH(RsE8H$^c0 z)4i^Gp&{6Xmae>(H_0OYoZSE*lhxNTbg|ceS7ygViz&~L33iEdw_;S*Ahj@TkHBU` z%ves<`9I`4Nz(D&%{S?>O=dAO4)Gt$5ssSncaWh32N9EzaOMN_LaX2M+q+Y6S8BIF z@7o-&$V6m}RY`}-$ccjNUe~rmD#hAiqA@pnI#YSwfCM~nA|;|ONq}*jPGcmgS5eg? zC`V^Cxb;UgYqMQE^S1nw3|-5ePvJ6Oq7{sK@R%p#F!qX-Q~`Pt>H&f0ww$G{wu07m z8xuNOR&-DezB$3ky?0{Pj55{gh)~)e1!9TMI9w=WA=Vk=3={Cm zCKVOLr)Er;n=BiW=d~!N%&YbMv6=Q-tIiG??Ik%4h6_9@veUGB-0hSFu^UNQmA@@8 z$dD^sgR|sU$aIR`>&cAtGE4YkpqZoyU%EESoE*W=76#O^Y$VvU>Vc?WTl;`v*s;Ds zyKSI{l`LXYljQB@M@2nyI$B7`)MA27rgeo~onm*LumXcE#7_fo)7WfkAJr|S@2@=IEdbl&0`d z5tGkP%`{NOC*kZGJfwelQWxj{DN|v7S3;oMwI=(+;@Ig{X2j`*GW$4H{DZvy*O3T_ zJ|?vy-XWkdz!UTEEy=7I6Z{B?dAvauf>_!k;{p?Itinp(#%2{{TMI?SycNNsmk7MY zBiyRCn|9)UtOXe)`)3!Gczb(5KCOw~;CRm)2yd ztWhc4=08(X!kP||qGrO$ev`p9BQspxOHD58e7uyBCUjgQCjGl$KB_)T=_OqN?0dIq zM+*=&vpZgu%{`ab0M?|sV>~xG+lZdCG2Ivm$+GQ)gD_58hV*HoQ5Ziymwj{9S3hk=qoU&2raZ#Rp!-WTP>_OKL!ay`<5YB}0VqviFu*pSHR!e=X5 z(M$CMvE^Q2{FkMT*7y>Tk}jCB0DJmISAyTbK5C^Y%R4q_F`Y28YC{Qvkt0R2rHq=o zy0M9gj@vsoHvPl4qw&ghIj>9MG-c!=H2$$P3z9eT)O&uh+j1Y?T#}1vzsgv&BzZ&a zi+h%6W>U3(;~Pkq5hWVU@X6{6#PCsmagp-P{ywe8hYwa6WZyY;0>P#cXcF}$F>Kbq zv&5cUdUQ^9Xtp`;U+>bDjtnUg{{3Yag-zrMD3S`d{{By=L=y@=u5#OO`0pj*|3kaA z9Si*t)KuNvZ5}^;2S17iveX`iFQ*ChK^t@?{0Z@3%UEi0xxPq2Dv>}dg}UBv z@+U<6K2nX1la>!zZ*?Qzh+LA|**)Yx&g}-+qf$V09#J9L>va*-(BhuAMe*a|>=QNT zkgzA8yqnZRTp)nPEtVA4A5&}=m0^j}8D=&s-QPz?Ys`19a+e%8+nYT>5S8FwVWjgy zj-SQ!*BOUzf)oNT72#&=w2q2m3r>ceNVE5DS}>rw()m9Y-rdp$NxVOJ_LIk+I3|;Is8Y264~S0xWb^Q9c5D&0)A} z_Xgc{wSaPd+m&;XAVN&`EgbEgTJIx8BjmisM7;aw~1{F0VH=3&vTrTi;p^sPNb7O$w~ z?ypqii&rv--X`Lizj}$3OJLsPXCw49wr*;OlO-DTx+KPwOvFj#^V9-UY1Y`qV&990 z3`vSNs~j^gU{Z9AHzb^sXkCC-d!f@lTz4ME2En|v6Wa@q{UIOGKB+EPsJo>0|1z=v zEo!w{{Bx~>{Pu%I&hwR|%l?RA5uFKUZrscNoS|kg0@Qqgj)MjeB7crkUY@t=jzrXD z69KUolGZxQ+mDb{>Prod)D3(--7#t2-f40>o@D$3Le`s?%-+@=W~gO+Yz(+C424f(*) zqTEBno;kCH(zGd9@l)yV3B~h{H7^tIHc70v_O5Mey`t2f78Gf zRcgf5NYj-?<0ZC`9gptS3tj2}jEe;#;;`I}y7#a7S$ox0!&U|dE-5t=L(R5`y}kA}S{N*w6x6@N5= zW3~rrj18!lENP=96RhaP9I3I>;$4U}jc*=aZr^rwM&;o7Qp9a@-tFOVb^X5mp`H8o z&Ag>Chvp$^QM;Gtwa)3Yj1Xfj5=*t5v%H8nYDsNUw(x((A1zk#iWx zC$3Jau>t>2!Nz>lSgQ3u4jDhvKM=N1Z_Ty6LV)z*l$Q&~m26kNY?xU$u&+!^hgr94 zq9cy}^RF+iZBy-b+~pJT`mTkri^(DBafcjPFJ4@r)PWg%{{eZ9Mf2xyj%RgBR@|n7 z-Qm6zT2)XicPGkJGup2YvQF>OPAd<@bw?1+03sq1GY5-Vk)E;3irW&;B1r9)co1LE zjZn%f7{j~wn01^tQej|0TI+r`ZHdf$|3K}R_T*sW>;4iC9t3kk8AUSCu?P!JV4`22s7=0a;=DB9taO))CLGLxg8af0ULZVeR!Tl&qI)sdl?|-Qrjwzg4)$2)(&D*X zdi1bhLGG0)B)D}l+3vCVfr;8P&U>ZvQ1dq|UtH<#V7Ss^kp~`dENX@?NpSi-v-k?3 zy*vEPS7G0`d%9sKF9K59jfX^>gvRR`3w@`ciWmYem`vT;dbviW8aO!cn~uW&OE==Z zxuu8SrJXfC!-6~AgsI(xD>*s4=51OTC*wT-H7NRR|BX122$xms1AXT0yg6w5wFJS% z(_2KR@o3CSjrNc8z=Qt}DDq!yXi{;Ay~thtXdl1;H?4UEbBGyr|0VnGGR4!s>k|-^ z{V_GWGuaQoqclqIx65>>z9cFOIj1i{f#u`@T;1o%>(dpthDJOHx-oa%{K4xNJk=d#sF&3~KxW6H|AAAs#Jm(J7EBy0S`&HZ#Ryklg@y zi|gU=(~o``SO(>nF%R@p_LtmPE`?nH1yl&43ieNrb=|-#Gt!br4`*d2 zOtqZ^Y5EmHfd}j5C>Z|3`x-O5FmNzE zO6|ZF)l&YmB;+~l%>lgw=f&%WwcPvikS%m7cnM>vB(aihjuv3em9tS1i7@3S&Ed(@ zXLRc+(@9b!+vO>C3IyF^Tpdfq4&ToMcTRl$SB65wTj3D?XIyI*4hEe@i=0P}F2PM{ z2SNXPn*T8=9#bL;%oXt&u8A@!1NqbG_}WjCL;*M!$!|!hd?mxcVHUq}33j^iq^T8J z-aRAQT)e(d2W(k3#dl6Zdi6_e69t8_oW>+N{CJg~wl6rDs5p9p77qE2*PNI%S(wl? za8X^K>Zh0A?soLe&1SdCi)JwP6XZ}RAP%ql0 z3K|*Q0Klv(c2gTxH98=!r7Agx2bEcsJiTRcq@fXOu@M=;qkHbTs1y{$u3AvLGbVrDb(8-GpEeaXpQkW@9G%``H_ot_*>?MN_a-W$u$95l0KH$U%HSzv0E zmZ;b`)6S!Wnon;nsP7j@wPYX-N!~I@zS&zC{YvR0ayrfaZMptt51{OuV~wy?h^v3n zJNSE$Pj@Qf@7I_!tpKwOL=X>D46&vo3HtffurmFH0KDY+6KBB`_#kKTkq_{a zVcGADP`{t_;!hPc&}FZcdDHIywj}+JLDql&pK77?0g-fhm!%J*lQyP$Bm1EXP=xxQ z5~P(J0m6@mv-ByO_VoYg^>(GO4bl(B+uf+3>9;0dT2m*H75N)=K0D{W*ZzntX_bn^ zkQ`f#qZ5aNo1B{7=PS(Tcuc-8lg1ZlS)}S9q+38{?Ntr!lFL8uo@F5-$f#1?W)xQM ze4^eY6LA|zm(`poxkkg!w^&{h@|aqZ_ff~DYq;QCkobObP59{fEQEMh)(mIP-kY&9 zn{<9JDox=JY=8QAel+fKUfv*iA`sl*Ql1*VZS~voVC|E&_-QpkoPae|TB3O+n>eoT zZ*1G&Sw~cnnTC;h$$oHFUotU=)ZE}vuAe_gzN(-MCb5}#J|UUWY4yq1{c6%%bsO{8 zWx=dPOv?A+HZ8#&!-HCtVo7VMxELAYGNy59&SfNmv?YCvOf)O=9q(HbAknaDaC6K> zbG`{nzqzH^`-a`nokly^Z&#TFK|*N)%Ib1j)22eG2v@bY^oV{(e0sNy7GD6S=j3m& zh=QIv{?m?)zdjF>|^sP7}59ygD4-q%ra>MfUk}aoU!4bYI)k&Vem}+5PWq!vk z_A-!Cr0x*Y6-drp3Vgmn-mWY*tg1$@IltMM`Nl|W>YtnQxkV~ijJ((|Xwoe%3DS>L|S2ZxLy`JUFcK(xbkSANNp5>KCR00+}O?caWv z|D)@>MN|g(r>YS9O^PX*+ADtV<^?o&oh@Gm37Epyo`^8MJw_DY|Av8AL4>IBd zGjmJ=CnpQmT!efPSxUS!J~~!){2Uk=Rg;KQrq{X4P58SMx`EG@U_k15j%G^nSq4l( zq1S61Rv*Wbiq;Jf{~H8~LCL(n{nopq_MR=z#4IK@rn~v#i&Fvps+*95aC)*<%K*$Z zV$}^}a$-u>+8O=u(XAX)pn^uBH<2e2xw?>(of*Hx`c=5IltGimf3yHUo~Q^PJMC-; zgf)zRFejxIwN4CF&{8z<`lqB24-LtiYv&|PeL+th4DGcntS(EjE@S0!{b(I6IrAWI zHmuM)=ZEj@{gQQwP1{>EZ)n79uXN6&8{?-TdESW^AGuB)RS{%FQ?8+8HqkPj5`DE7&Ty$Gd)Er|6khPCo=x0Mu3vjh z3>Mzau4Y)=i8oB4VBF)lntyG4`ul~%|H$*7a7TU4t5x(qtp@$+csh4BKKuv8j+y^l zwSYygSyo8{-BVXxE$5oL{8+VsQItQDijTw`48%c@Yyaz((gsnpiIO9iT*0ZA2vIRh z_emOw1Z_>D?!eE$@A=_c4K7sN+!OM*>iI1~dQ7L&%upt0`Qct8qAlmb5&gWg16q<) zZ3`Q#&I+QPpf!AxNB+yP+*rJ&dR8HdaCZud=Nz?#uM6WMe5o^hT5>b|Cp4+njs6Au zTV5;#}g7YIxu}crn6tsp^#=lC8ht_=- zF_yk(lM-pX44?ih;bzY%wZCzTDAjJ6H7F|E+CxpHymu3Gha1OKioamr0%39Uw=6q5(e1Dx|hCg_0f0+jA|0S*P|2Du2{G3UB zxA&ma9R(i*0gv#v_BD$!j6Xv*w_2aD77in354(E0-dI;Z*2x3682_!5?xu|Te>&vW zGj@@4(9;g2{EbORtKgqYZg>toCG{lC$9t?j`_+38nUHWsB8NO$rpKsaX@^yI#fO!W|j4)U}di zH!g%tDWdu3@FNSZ6wjAo;vYcIzYzHWFr;%nT%+k$3XxRQ=+c(sS6cQRR?;-a zd6J&KX#z32#6NYWfBID_ad*loSgJ>Eoq7bSCur>B>L~=hpqh41ClFDrRc~!R;l6s^ zIdFeTx0%Wx4G2?546?qrs8k%A0-ycqhgww5Pbv5J2h)Ggzg+PbtDK22n09sHHSS*6 zJUz^cz4D28OdodL_is_xD{kR4)rtESWVW*dz4V&&dpy5@jqgOL+g~qlD@5^cmEP^K z=4Fvevtc?WcW&d-Nd;wkj-%7(>3)BdFMj`d)Vfxu-50}{Te&4D0-wz~Dk(zf=~d_5 zsXK1N*cisrN#E4|2FHxz^~Djcik}TKW0gSQ&$`v zYK4D)&2arg;N}iwoe^gbd;er4l$<*yZz;m@B`t%kt?u@#U8KG_|z1RGK# z?w}E2U5$$?QCTZ2nXi|geN+<`4EaBeeZ7hCM0|Uym8LH7&HrBei4SE@U+j28@TG56>{m=DvY$l~`4 zF+-AFgra2exeqOPlw}OG@#AH{kEya--3weH4{cO}En&y^quCbQzY&Qnl@w?kH?_wH z=&z5Kao;l~tuo}gjWHYDHKgI>; z_5EnW{L_~OjraTi=W~|MR9o;S^_Q))PHAz2^dhsO#W8Y{TCVc=z~@BLLzyFbuM#wUGS6k2pU ztoi_eW%%n&V*Q_HmBnHWPC#3!H;?O>%ooLu9_Q8M^*h_8AFtxDe@461s|OskgiVNVv0V)HgdTp`c3hjI&O_F$)9b+BPaX ztJ|v%pUfy*7U}zI$dnHtY`b8yiTy7ShDmH7&;%8i{7q$uvT_X7r`0dc=)RA1hsN*J z_>B(6jy?lcVd|a8;;n6a3JRFoCbXPkUeS4hD5DHfTuQxpZKkQt@1y6MTc(2t1N(idRwW+zN;g@8wI>=c?l&Jq7{ zk>2EIkHOb}m&XZ?_Z%~%j#1RYe%i^4_zRtj{*C`V;pSKa#*Gkq{`x=7eR(`oZU4Wt zP?pi1EZNc~ktNyJ(s~PR_GOZgeH~+&A%wEF+fCY3VlY`EgTz!A)nII6MnjgtV2s(A z`Hj22_oL_gs>k!~{^RGbc{%4?=ej=o`~A7jId8GY!{>+q7j?mu_m1^@5HD#3shkJ{ zpDK-uRUFR3G#qt{_!*Yp!GuJW_OZy z+L6z9E+y^QJE7X1DtbJPz5cqOUFFtw*Ijn6S=V^%MluhBpTWc6;azvl@ubEfkd2Lv zl?@DI7qALIS#E8lwu^;z3@L_Fu1ar?o?|y!f?Iu@v*6^u!`eS5xXyt1>txda3x@kC1k#Pzsn49$JZEr$#^lg!5@gU| zwztQVwetb@OFA*xYg$4rTkHCn?4YZjWA57caB}N7Q*bY!{%f?8TF50Cqdy|kS~}o7 z#k#b%;K5J9u%0=S@a<*5;;n9I^1+Y|PJKcSvS&;UF(=L?_Jbb2C?cwbKwoTW{T%8P zCM?JrW^4O|M~F}0wTo?Ak_t^+caN@xZ&P5|dYzZHJXYVqq$$WXVnLAuR{udle@pT7 zCaz3$>C7yDjvI}U9@Sv9Gr%QA1X2ekJJU+Qbw!cGH;=0rqyhf;CV7Ch$qcoTxoycy zK(rAn^1yy`pMcBT8ds0g(#~@APsnfN);q|<&2M(dr}sIrM(nBtI9Jhdj{=G}f4w_r zKHi7_eX3%!MA(#ZWN3F@yagP4xDe~qJzkN0w7Sx7wijQMAZ;!-q4#CPeDt)tYmWbG z-w?w$C#3FqkjD-BbTE1gh}OeZ2;q`m7RyU1{S4H(TiiM2oPX89wxKu&Ig(XD>%qoy zb_g1P4?Wgd;#!AV9KVITXlg{cJb0UALwiF~=T1w^Uy@IKit(*K>c~6205G?Xs}HV20aJ zw*+$^CpE$*G{3FXzDbn|It5Q8;CrZ=>}`HIhpUP89dHJXDSA5fXmhC#eq8gQ^i&+Y zwnShE8}<6wScQUZSlyhRU~|{>!%z7sK8nVW3)}*%w_ek3RQZ%6C(F|u!f1E{92W8I z__LCHAmI_Eq!GG>-~)s6$5m~RTkwTCS8mNub6vFEhv2VE0|WIAVWyq>6k5&Hx}?x{ z6Ak(a&j1Fh_ne-jM%^@y?=aGcjMB`NG7x_SCcRysRR^T@@2|RnhZU1t2oPb90tYH1 z98BbX|E0V5c&&$@aW5{Md42lk?c3AC!+l3B`b-&ZbZjCVUyH2^Bs+sCEveIA$Hz^d zHJfi-rOR(!_s!*}NBlwXx)9dBNts}X39s?exFw4~N|n;C!C)}cOe*OO9PqBM^e?Sk zC^Dhjpk^$`(6a3CB`UTS%zY2R61gAAFQSv*@V-_~ZiDx*q=SrO>vrJc1^%QK9+wGQ z2~<%ITui-0@7lenG<>IwwCPQ#N4Ln8cD;J`0n*;cDSN?(vPmzS#mZd^v1%dw`<(kh z9t!d^+w|+6Y!saBQ_RrXy&02N-Y`6|bs|ym4}Uwy)6+r>TPw5hKVh#C}rNdUWmh*w<88)qGS7c+nQvH(wlwst#1yg z9eJOZc#K&7wt#}uy{ioof0Hf`F+5U}2-vlBagAA9??Hrk!qAiLOtm(n%o#s}De7B{ zFBs={$}5dkJp=Q7F?R@K`ErS#<=j4M`)4Zag(}>DN2%5*W7Ip_-7)cbB8jjW?KNl> zK@Z1H9FP$U)HcYOs~Tlp%6{K@QeWS{i>DYQTXmG4j1q~e3yi3XM7e4&D|omO1v2PexHIlicwTvvEwS)|+m8Ho3DG6-oa5pD<5{NS z5^?Y$+60h2mw|i#{v>`%b1`ZvnJ0$0QF#N9RcbA^x45SE31Lt|BBh{%P2IQG<|?w~ zv+Ku@?&l#V7KP$OiFe?M_wD4g1PZVSMLVta%qN}pvIlZURKV&3;u9Mi8`NMT5khjC zWPm6Wr%5FTh|z{47`h^=N*ial-}yDFb3%PE_}c4Ay_0+H?OUTgV$~|Cy+k>USB6R4 zYGz0fZz&%&R%p_D*K_AG(sq~L=>9())Z0a~bG^)EP9mUMeud5FGz6F}F{qL!n6wvj zLl`KEXRJ96PDH03!tSGIr&*P~jEseAdgv9#eJmi5X4puAx3v6JKhq?!gS-)$21sfq zcx%S&GKSnY!ZZbRA${Y|VD`Lw?LpG-bh5$o0TH845hjlZBDQ``y*_Zz;;L$tik4fo zhbCeos)GA?)4MD^WWF=mZzEEcto`TC&8y0?CInxV?evIA0*M@5QOin%h2{85VIptv zx|p#SM~%tLv5s2L{vuus!_?J#(R|ACzt|cLG16dDXco`u>jBU;olo?rVim zh?D-M+BL*JOG~VqkPu58Q%#j39=G>=?}W|E190A=i=o>qIpGo->%X+P9In=c$mQ>b z_JGFb`oK*o^$BE@a2nOgqY+V|0c?9Co9$0+Q+fjdai4!sw^C{qk}Fb`X?+H3OLXs2 zJ*3q$k6mAoJa!%^d8wV{qH@Kr2S&L-+;)utWd*kIjQ;U9rT}$?a;rc4Ly~t(9Zbuo zsc6HswZp2aoV41oE9WF5qpO^C(8Z$-5^r!mr=j;>coeXqtU|B0*Y){OBZ>t&+10H{ zl;s1d76KsVXJ_Q7n>-XlAax)!?q`f~8b+3@C}g-U5mU6|n~*8MscGasdW4nm$GB_{ zdbFU7DZC&jSM{4)5$5=>-tZoq-}VMxSXh`*sCHK*OlqUSJi)tEnKukH=kwP2#E0ev z?`SKz(9}lk?C9f)O|(<;Jq7)w8*);IOU)XwcCWl?ZyE_Cogin%5kkz(aPlxFmSIreda_#Ma^m2_{+yxzP4CX%F~3t(aQI_QdRE)rt`1`43&7Wc35YI z%2Z;zsm0nZim#R=uuR2mK{Gd5;IT_lNwrx)Uy}$GXA`e-+tn^wZ#2nm&~r4&6~+yg1rbCq9GwX3d}NQQh2UQ9+65WTr2YZo_l#>K*w?ltdT zWsz6?fj1V85=KTby>U3zjY#JaQ@80A*ABoMF3x~l6F-Y2NY&5Hc(YLruT5Q8Ol68D zi9fp?Vew=^I|V$|s&nI%g% z@oXEJtphq|hl1rI!9de?^CmQ@V>HLV*ae3L7)?GLS{v7Aa29&`<(bG!W>nFkcZ%SQVhWSve?FY`eCu)rvQ`ILZ7Vc;?|@G;;Qel;AWj

JtBZDQ4t6!cQJjtwrP52C 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�oqI8a`H>ZeuV9?dYH8}@P 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

E0aFmo;)L&`T&E?fApXE$ztZr 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 diff --git a/docs/integration-egi.md b/docs/integration-egi.md index 4356f57f..632897d0 100644 --- a/docs/integration-egi.md +++ b/docs/integration-egi.md @@ -67,7 +67,7 @@ grant access for all users from that VO. The static web interface of OSCAR has been integrated with EGI Check-in and published in [ui.oscar.grycap.net](https://ui.oscar.grycap.net) to facilitate -the authorization of users. To login through EGI Check-In using OIDC tokens, +the authorization of users. To login through EGI Checkín using OIDC tokens, users only have to put the endpoint of its OSCAR cluster and click on the "EGI CHECK-IN" button. @@ -87,17 +87,3 @@ create a new account configuration for the After that, clusters can be added with the command [`oscar-cli cluster add`](oscar-cli.md#add) specifying the oidc-agent account name with the `--oidc-account-name` flag. - -### Obtaining an Access Token - -Once logged in via EGI Check-In you can obtain an Access Token with one of this approaches: - -* From the command-line, using `oidc-agent` with the following command: - - ```sh - oidc-token - ``` - where `account-short-name` is the name of your account configuration. -* From the EGI Check-In Token Portal: [https://aai.egi.eu/token](https://aai.egi.eu/token) - -![egi-checkin-token-portal.png](images/oidc/egi-checkin-token-portal.png) diff --git a/docs/invoking-async.md b/docs/invoking-async.md index b480cfb0..60119924 100644 --- a/docs/invoking-async.md +++ b/docs/invoking-async.md @@ -2,11 +2,11 @@ For event-driven file processing, OSCAR automatically manages the creation and [notification system](https://docs.min.io/minio/baremetal/monitoring/bucket-notifications/bucket-notifications.html#minio-bucket-notifications) -of MinIO buckets. This allow the event-driven invocation of services -using asynchronous requests for every file uploaded to the bucket, which generates a Kubernetes job for every file to be processed. +of MinIO buckets in order to allow the event-driven invocation of services +using asynchronous requests, generating a Kubernetes job for every file to be +processed. + ![oscar-async.png](images/oscar-async.png) -These jobs will be queued up in the Kubernetes scheduler and will be processed whenever there are resources available. If OSCAR cluster has been deployed as an elastic Kubernetes cluster (see [Deployment with IM](https://docs.oscar.grycap.net/deploy-im-dashboard/)), then new Virtual Machines will be provisioned (up to the maximum number of nodes defined) in the underlying Cloud platform and seamlessly integrated in the Kubernetes clusters to proceed with the execution of jobs. These nodes will be terminated as the worload is reduced. Notice that the output files can be stores in MinIO or in any other storage back-end supported by the [FaaS supervisor](oscar-service.md#faas-supervisor). -If you want to process a large number of data files, consider using [OSCAR Batch](https://github.com/grycap/oscar-batch), a tool designed to perform batch-based processing in OSCAR clusters. It includes a coordinator tool where the user provides a MinIO bucket containing files for processing. This service calculates the optimal number of parallel service invocations that can be accommodated within the cluster, according to its current status, and distributes the image processing workload accordingly among the service invocations. This is mainly intended to process large amounts of files, for example, historical data. diff --git a/docs/invoking-sync.md b/docs/invoking-sync.md index 9dd75329..56fcc000 100644 --- a/docs/invoking-sync.md +++ b/docs/invoking-sync.md @@ -83,8 +83,8 @@ base64 input.png | curl -X POST -H "Authorization: Bearer " \ ## Service access tokens -As detailed in the [API specification](api.md), invocation paths require either the -service access token or the Access Token of the user when the cluster is integrated with EGI Check-in, in the request header for authentication (any of them is valid). Service access +As detailed in the [API specification](api.md), invocation paths require the +service access token in the request header for authentication. Service access tokens are auto-generated in service creation and update, and MinIO eventing system is automatically configured to use them for event-driven file processing. Tokens can be obtained through the API, using the diff --git a/docs/invoking.md b/docs/invoking.md index 1c0c43b9..25a0664a 100644 --- a/docs/invoking.md +++ b/docs/invoking.md @@ -2,16 +2,7 @@ OSCAR services can be executed: - - [Synchronously](invoking-sync.md), so that the invocation to the service blocks the client until the response is obtained. + - [Synchronously](invoking-sync.md), so that the invocation to the service blocks the client until the response is obtained. Useful for short-lived service invocations. - [Asynchronously](invoking-async.md), typically in response to a file upload to MinIO or via the OSCAR API. - - As an [exposed service](exposed-services.md), where the application executed already provides its own API or user interface (e.g. Jupyter Notebook) - - -After reading the different service execution types, take into account the following considerations to better decide the most appropriate execution type for your use case: - -* **Scalability**: Asynchronous invocations provide the best throughput when dealing with multiple concurrent data processing requests, since these are processed by independent jobs which are managed by the Kubernetes scheduler. A two-level elasticity approach is used (increase in the number of pods and increase in the number of Virtual Machines, if the OSCAR cluster was configured to be elastic). This is the recommended approach when each processing request exceeds the order of tens of seconds. - -* **Reduced Latency** Synchronous invocations are oriented for short-lived (< tens of seconds) bursty requests. A certain number of containers can be configured to be kept alive to avoid the performance penalty of spawning new ones while providing an upper bound limit (see [`min_scale` and `max_scale` in the FDL](fdl.md#synchronoussettings), at the expense of always consuming resources in the OSCAR cluster. If the processing file is in the order of several MBytes it may not fit in the payload of the HTTP request. - -* **Easy Access** For services that provide their own user interface or their own API, exposed services provide the ability to execute them in OSCAR and benefit for an auto-scaled configuration in case they are [stateless](https://en.wikipedia.org/wiki/Service_statelessness_principle). This way, users can directly access the service using its well-known interfaces by the users. + - As an [exposed service](exposed-services.md), where the application executed already provides its own API or user interface (e.g. a Jupyter Notebook) diff --git a/docs/minio-usage.md b/docs/minio-usage.md deleted file mode 100644 index 32fd22a6..00000000 --- a/docs/minio-usage.md +++ /dev/null @@ -1,50 +0,0 @@ -# Using the MinIO Storage Provider - -Each OSCAR cluster includes a deployed MinIO instance, which is used to trigger service executions. When a service is configured to use MinIO as its storage provider, it monitors a specified input folder for new data. Whenever new data is added to this folder, it triggers the associated service to execute. - -## Using graphical interfaces - -These folders can be accessed via both the OSCAR UI and the MinIO console UI. - -- **Using OSCAR-UI**: The following image highlights the section where MinIO buckets are accessible. Users can view a list of available buckets and perform operations such as uploading and deleting files. - -![minio-buckets](images/bucket-list.png) - -- **Using the MinIO Console UI**: Access details for this interface are available in the "Info" tab within the OSCAR UI. This tab provides the MinIO console endpoint and the necessary credentials to log in, where the *Access Key* serves as the username, and the *Secret Key* functions as the password. - -![oscar-info](images/oscar-info.png) - -Finally, the following image provides an overview of the MinIO login panel and the "Object Browser" tab. Once logged in, the "Object Browser" tab allows users to navigate their available buckets, view stored objects, and perform various operations such as uploading, downloading, or deleting files. - -![oscar-info](images/minio-ui.png) - -Further information about the MinIO Console avaliable on [MinIO Console documentation](https://min.io/docs/minio/linux/administration/minio-console.html). - -## Using command-line interfaces - -MinIO buckets can also be managed through [oscar-cli command-line](https://github.com/grycap/oscar-cli) or the official [MinIO client](https://min.io/docs/minio/linux/reference/minio-mc.html). - -- **oscar-cli**: The OSCAR client provides a dedicated set of commands for accessing files within buckets. It is important to note that this interface does not support DELETE or UPDATE operations. Below is a brief overview of the available commands and their functionalities. - - [get-file](https://docs.oscar.grycap.net/oscar-cli/#get-file): Get file from a service's storage provider. - - [list-files](https://docs.oscar.grycap.net/oscar-cli/#list-files): List files from a service's storage provider path. - - [put-file](https://docs.oscar.grycap.net/oscar-cli/#put-file): Upload a file on a service storage provider. - - An example of a put-file operation: - - ``` bash - oscar-cli service put-file fish-detector.yaml minio .path/to/your/images ./fish-detector/input/ - ``` - -- **mc**: If a user wants to use the MinIO client it needs to follow some previous steps. - - *Install the client*: Detailed instructions for installing the MinIO client (mc) are available in [the official documentation](https://min.io/docs/minio/linux/reference/minio-mc.html#install-mc). - - *Configure the MinIO instance*: The client requires credentials to connect and interact with the MinIO instance. This configuration can be set with the following command: - - ``` bash - mc alias set myminio https://minio.gracious-varahamihira6.im.grycap.net YOUR-ACCESS-KEY YOUR-SECRET-KEY - ``` - - Once the client is configured, users can perform various operations supported by the MinIO client. For a complete list of available commands and their usage, refer to the [MinIO client reference](https://min.io/docs/minio/linux/reference/minio-mc.html#command-quick-reference). The following example demonstrates a PUT operation, where a file is uploaded to a specific folder within a bucket. - - ```bash - mc cp /path/to/your/images/*.jpg myminio/fish-detector/input/ - ``` diff --git a/docs/oscar-service.md b/docs/oscar-service.md index afcee018..b06e0ec1 100644 --- a/docs/oscar-service.md +++ b/docs/oscar-service.md @@ -15,7 +15,7 @@ is in charge of: -### FaaS Supervisor +### Input/Output [FaaS Supervisor](https://github.com/grycap/faas-supervisor), the component in charge of managing the input and output of services, allows JSON or base64 @@ -37,16 +37,6 @@ The output of synchronous invocations will depend on the application itself: This way users can adapt OSCAR's services to their own needs. -The FaaS Supervisor supports the following storage back-ends: -* [MinIO](https://min.io) -* [Amazon S3](https://aws.amazon.com/s3/) -* Webdav (and, therefore, [dCache](https://dcache.org)) -* Onedata (and, therefore, [EGI DataHub](https://www.egi.eu/service/datahub/)) - -### Container images - -Container images on asynchronous services use the tag `imagePullPolicy: Always`, which means that Kubernetes will check for the image digest on the image registry and download it if it is not present. -So, if you are using an image without a specific tag or with the latest tag, the service will automatically download and use the most recent version of the image on its executions, whenever the image is updated. You can follow one of the [examples](https://github.com/grycap/oscar/tree/master/examples) diff --git a/examples/plant-classification-theano/README.md b/examples/plant-classification-theano/README.md index 94248e20..53dc5b5a 100644 --- a/examples/plant-classification-theano/README.md +++ b/examples/plant-classification-theano/README.md @@ -63,5 +63,5 @@ To run this example you need: 1. Once the function is executed, the output is automatically copied to the output bucket in minio, in this case `plant-classifier-out`. You can - download the output from here for further processing. + download the ouput from here for further processing. ![minio-out.png](img/Minio-OUT.png) diff --git a/examples/plants-classification-tensorflow/script.sh b/examples/plants-classification-tensorflow/script.sh index 26835bb6..ab76ecc8 100644 --- a/examples/plants-classification-tensorflow/script.sh +++ b/examples/plants-classification-tensorflow/script.sh @@ -1,6 +1,6 @@ #!/bin/bash -IMAGE_NAME=`basename "$INPUT_FILE_PATH" | cut -d. -f1` +IMAGE_NAME=`basename "$INPUT_FILE_PATH"` OUTPUT_FILE="$TMP_OUTPUT_DIR/output.json" deepaas-cli predict --files "$INPUT_FILE_PATH" 2>&1 | grep -Po '{.*}' > "$OUTPUT_FILE" diff --git a/examples/yolov8/README.md b/examples/yolov8/README.md deleted file mode 100644 index a4645e5f..00000000 --- a/examples/yolov8/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Object Detection with YOLOv8 - -Detect objects in images using the state-of-the-art YOLOv8 model. - -## About YOLO - -This node utilizes the YOLOv8 (You Only Look Once version 8) model to detect objects within images. YOLOv8 is a cutting-edge, real-time object detection system known for its speed and accuracy, capable of identifying thousands of object categories efficiently. - -## About YOLOV8 Service in OSCAR - -This service uses the pre-trained YOLOv8 model provided by DEEP-Hybrid-DataCloud for object detection. It is designed to handle synchronous invocations and real-time image processing with high scalability, managed automatically by an elastic Kubernetes cluster. - -In order to invoke the function, first you have to create a service, either by the OSCAR UI or by using the FDL within the following command. - - -``` sh -oscar-cli apply yolov8.yaml -``` - -Once the service is created you can make the invocation with the following -command, which will store the output on a minio bucket. - -``` sh -oscar-cli service put-file yolov8.yaml minio img/cat.jpg yolov8/input/cat.jpg \ No newline at end of file diff --git a/examples/yolov8/img/cat.jpg b/examples/yolov8/img/cat.jpg deleted file mode 100644 index 016cdd8250cf8f68f985f51ae429e5def72469ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22672 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 diff --git a/examples/yolov8/img/cat.jpg:Zone.Identifier b/examples/yolov8/img/cat.jpg:Zone.Identifier deleted file mode 100644 index db4f2e84..00000000 --- a/examples/yolov8/img/cat.jpg:Zone.Identifier +++ /dev/null @@ -1,4 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=https://www.google.com/ -HostUrl=https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Cat_November_2010-1a.jpg/220px-Cat_November_2010-1a.jpg diff --git a/examples/yolov8/script.sh b/examples/yolov8/script.sh deleted file mode 100644 index 631e4552..00000000 --- a/examples/yolov8/script.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -IMAGE_NAME=`basename "$INPUT_FILE_PATH"` -OUTPUT_FILE="$TMP_OUTPUT_DIR/output.png" - -deepaas-cli --deepaas_method_output="$OUTPUT_FILE" predict --files "$INPUT_FILE_PATH" --accept image/png 2>&1 - -echo "Prediction was saved in: $OUTPUT_FILE" \ No newline at end of file diff --git a/examples/yolov8/yolov8.yaml b/examples/yolov8/yolov8.yaml deleted file mode 100644 index 0db5095c..00000000 --- a/examples/yolov8/yolov8.yaml +++ /dev/null @@ -1,17 +0,0 @@ -functions: - oscar: - - oscar-cluster: - name: yolov8 - memory: 4Gi - cpu: '2.0' - image: ai4oshub/ai4os-yolov8-torch:latest - script: script.sh - vo: vo.imagine-ai.eu - allowed_users: [] - log_level: CRITICAL - input: - - storage_provider: minio.default - path: yolov8/input - output: - - storage_provider: minio.default - path: yolov8/output \ No newline at end of file diff --git a/go.mod b/go.mod index c29f3ffe..ddb974fc 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,6 @@ require ( require ( github.com/fatih/color v1.14.1 // indirect - github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/rs/xid v1.4.0 // indirect @@ -53,7 +52,6 @@ require ( ) require ( - bou.ke/monkey v1.0.2 github.com/GehirnInc/crypt v0.0.0-20190301055215-6c0105aabd46 // indirect github.com/apache/yunikorn-scheduler-interface v1.2.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect diff --git a/go.sum b/go.sum index 0fadf17e..3d436868 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI= -bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d h1:LblfooH1lKOpp1hIhukktmSAxFkqMPFk9KR6iZ0MJNI= @@ -108,8 +106,6 @@ github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXK github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -153,6 +149,8 @@ github.com/grycap/cdmi-client-go v0.1.1/go.mod h1:ZqWeQS3YBJVXxg3HOIkAu1MLNJ4+7s github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -276,6 +274,18 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= diff --git a/main.go b/main.go index a98e2a65..53bca6d4 100644 --- a/main.go +++ b/main.go @@ -105,12 +105,12 @@ func main() { system.GET("/status", handlers.MakeStatusHandler(kubeClientset, metricsClientset)) // Job path for async invocations - r.POST("/job/:serviceName", auth.GetLoggerMiddleware(), handlers.MakeJobHandler(cfg, kubeClientset, back, resMan)) + r.POST("/job/:serviceName", handlers.MakeJobHandler(cfg, kubeClientset, back, resMan)) // Service path for sync invocations (only if ServerlessBackend is enabled) syncBack, ok := back.(types.SyncBackend) if cfg.ServerlessBackend != "" && ok { - r.POST("/run/:serviceName", auth.GetLoggerMiddleware(), handlers.MakeRunHandler(cfg, syncBack)) + r.POST("/run/:serviceName", handlers.MakeRunHandler(cfg, syncBack)) } // System info path diff --git a/mkdocs.yml b/mkdocs.yml index 18bb0df2..fa259848 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,7 +21,6 @@ nav: - oscar-cli.md - usage-ui.md - api.md - - MinIO: minio-usage.md - Service Execution: - invoking.md @@ -64,4 +63,4 @@ plugins: - search - render_swagger -copyright: "© GRyCAP - I3M - Universitat Politècnica de València, Spain." +copyright: "© GRyCAP - I3M - Universitat Politècnica de València, Spain." \ No newline at end of file diff --git a/pkg/backends/fake.go b/pkg/backends/fake.go index 3c2ad304..c9ec6b26 100644 --- a/pkg/backends/fake.go +++ b/pkg/backends/fake.go @@ -31,8 +31,7 @@ var errFake = errors.New("fake error") // FakeBackend fake struct to mock the beahaviour of the ServerlessBackend interface type FakeBackend struct { - errors map[string][]error - Service *types.Service // service to be returned by the ReadService function + errors map[string][]error } // MakeFakeBackend returns the pointer of a new FakeBackend struct @@ -82,12 +81,7 @@ func (f *FakeBackend) CreateService(service types.Service) error { // ReadService returns a Service (fake) func (f *FakeBackend) ReadService(name string) (*types.Service, error) { - // default service returned by the function - service := &types.Service{Token: "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf"} - if f.Service != nil { - service = f.Service - } - return service, f.returnError(getCurrentFuncName()) + return &types.Service{Token: "AbCdEf123456"}, f.returnError(getCurrentFuncName()) } // UpdateService updates an existent service (fake) diff --git a/pkg/backends/k8s.go b/pkg/backends/k8s.go index 0879991d..c41a1f2a 100644 --- a/pkg/backends/k8s.go +++ b/pkg/backends/k8s.go @@ -57,21 +57,23 @@ func (k *KubeBackend) GetInfo() *types.ServerlessBackendInfo { // ListServices returns a slice with all services registered in the provided namespace func (k *KubeBackend) ListServices() ([]*types.Service, error) { - // Get the list with all Knative services - configmaps, err := getAllServicesConfigMaps(k.namespace, k.kubeClientset) + // Get the list with all podTemplates + podTemplates, err := k.kubeClientset.CoreV1().PodTemplates(k.namespace).List(context.TODO(), metav1.ListOptions{}) if err != nil { - log.Printf("WARNING: %v\n", err) return nil, err } - services := []*types.Service{} - for _, cm := range configmaps.Items { - service, err := getServiceFromConfigMap(&cm) + services := []*types.Service{} + for _, podTemplate := range podTemplates.Items { + // Get service from configMap's FDL + svc, err := getServiceFromFDL(podTemplate.Name, k.namespace, k.kubeClientset) if err != nil { - return nil, err + log.Printf("WARNING: %v\n", err) + } else { + services = append(services, svc) } - services = append(services, service) } + return services, nil } @@ -146,14 +148,8 @@ func (k *KubeBackend) ReadService(name string) (*types.Service, error) { return nil, err } - // Get the configMap of the Service - cm, err := k.kubeClientset.CoreV1().ConfigMaps(k.namespace).Get(context.TODO(), name, metav1.GetOptions{}) - if err != nil { - return nil, fmt.Errorf("the service \"%s\" does not have a registered ConfigMap", name) - } - // Get service from configMap's FDL - svc, err := getServiceFromConfigMap(cm) + svc, err := getServiceFromFDL(name, k.namespace, k.kubeClientset) if err != nil { return nil, err } @@ -216,14 +212,6 @@ func (k *KubeBackend) UpdateService(service types.Service) error { } } - //Create deaemonset to cache the service image on all the nodes - if service.ImagePrefetch { - err = imagepuller.CreateDaemonset(k.config, service, k.kubeClientset) - if err != nil { - return err - } - } - return nil } @@ -254,12 +242,17 @@ func (k *KubeBackend) DeleteService(service types.Service) error { return nil } -func getServiceFromConfigMap(cm *v1.ConfigMap) (*types.Service, error) { +func getServiceFromFDL(name string, namespace string, kubeClientset kubernetes.Interface) (*types.Service, error) { + // Get the configMap of the Service + cm, err := kubeClientset.CoreV1().ConfigMaps(namespace).Get(context.TODO(), name, metav1.GetOptions{}) + if err != nil { + return nil, fmt.Errorf("the service \"%s\" does not have a registered ConfigMap", name) + } service := &types.Service{} // Unmarshal the FDL stored in the configMap - if err := yaml.Unmarshal([]byte(cm.Data[types.FDLFileName]), service); err != nil { - return nil, fmt.Errorf("the FDL of the service \"%s\" cannot be read", cm.Name) + if err = yaml.Unmarshal([]byte(cm.Data[types.FDLFileName]), service); err != nil { + return nil, fmt.Errorf("the FDL of the service \"%s\" cannot be read", name) } // Add the script to the service from configmap's script value @@ -372,17 +365,6 @@ func deleteServiceConfigMap(name string, namespace string, kubeClientset kuberne return nil } -func getAllServicesConfigMaps(namespace string, kubeClientset kubernetes.Interface) (*v1.ConfigMapList, error) { - listOpts := metav1.ListOptions{ - LabelSelector: "oscar_service", - } - configMapsList, err := kubeClientset.CoreV1().ConfigMaps(namespace).List(context.TODO(), listOpts) - if err != nil { - return nil, err - } - return configMapsList, nil -} - func deleteServiceJobs(name string, namespace string, kubeClientset kubernetes.Interface) error { // ListOptions to select all the associated jobs with the specified service listOpts := metav1.ListOptions{ diff --git a/pkg/backends/k8s_test.go b/pkg/backends/k8s_test.go index e9e4f30b..1a967bda 100644 --- a/pkg/backends/k8s_test.go +++ b/pkg/backends/k8s_test.go @@ -113,12 +113,29 @@ func TestKubeGetInfo(t *testing.T) { } func TestKubeListServices(t *testing.T) { + validPodTemplateListReactor := func(action k8stesting.Action) (handled bool, ret runtime.Object, err error) { + podTemplateList := &v1.PodTemplateList{ + Items: []v1.PodTemplate{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "test", + Namespace: "testnamespace", + }, + Template: v1.PodTemplateSpec{}, + }, + }, + } + return true, podTemplateList, nil + } t.Run("valid list", func(t *testing.T) { clientset := fake.NewSimpleClientset() back := MakeKubeBackend(clientset, testConfig) + // Return a valid PodTemplateList + back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("list", "podtemplates", validPodTemplateListReactor) + // Return a valid configMap back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("get", "configmaps", validConfigMapReaction) @@ -129,11 +146,29 @@ func TestKubeListServices(t *testing.T) { } }) + t.Run("listing podTemplates throws an error", func(t *testing.T) { + clientset := fake.NewSimpleClientset() + + back := MakeKubeBackend(clientset, testConfig) + + // Return an error listing PodTemplates + back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("list", "podtemplates", errorReaction) + + // Call + _, err := back.ListServices() + if err == nil { + t.Error("expecting error, got: nil") + } + }) + t.Run("getServiceFromFDL throws error getting configMap", func(t *testing.T) { clientset := fake.NewSimpleClientset() back := MakeKubeBackend(clientset, testConfig) + // Return a valid PodTemplateList + back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("list", "podtemplates", validPodTemplateListReactor) + // Return an error getting the configMap back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("get", "configmaps", errorReaction) @@ -163,6 +198,9 @@ func TestKubeListServices(t *testing.T) { return true, validCM, nil } + // Return a valid PodTemplateList + back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("list", "podtemplates", validPodTemplateListReactor) + // Return a valid configMap with invalid FDL back.kubeClientset.(*fake.Clientset).Fake.PrependReactor("get", "configmaps", validConfigMapWithInvalidFDLReactor) diff --git a/pkg/backends/knative.go b/pkg/backends/knative.go index 566352c4..9e1391e9 100644 --- a/pkg/backends/knative.go +++ b/pkg/backends/knative.go @@ -76,20 +76,22 @@ func (kn *KnativeBackend) GetInfo() *types.ServerlessBackendInfo { // ListServices returns a slice with all services registered in the provided namespace func (kn *KnativeBackend) ListServices() ([]*types.Service, error) { // Get the list with all Knative services - configmaps, err := getAllServicesConfigMaps(kn.namespace, kn.kubeClientset) + knSvcs, err := kn.knClientset.ServingV1().Services(kn.namespace).List(context.TODO(), metav1.ListOptions{}) if err != nil { - log.Printf("WARNING: %v\n", err) return nil, err } - services := []*types.Service{} - for _, cm := range configmaps.Items { - service, err := getServiceFromConfigMap(&cm) + services := []*types.Service{} + for _, knSvc := range knSvcs.Items { + // Get service from configMap's FDL + svc, err := getServiceFromFDL(knSvc.Name, kn.namespace, kn.kubeClientset) if err != nil { - return nil, err + log.Printf("WARNING: %v\n", err) + } else { + services = append(services, svc) } - services = append(services, service) } + return services, nil } @@ -149,13 +151,8 @@ func (kn *KnativeBackend) ReadService(name string) (*types.Service, error) { return nil, err } - // Get the configMap of the Service - cm, err := kn.kubeClientset.CoreV1().ConfigMaps(kn.namespace).Get(context.TODO(), name, metav1.GetOptions{}) - if err != nil { - return nil, fmt.Errorf("the service \"%s\" does not have a registered ConfigMap", name) - } // Get service from configMap's FDL - svc, err := getServiceFromConfigMap(cm) + svc, err := getServiceFromFDL(name, kn.namespace, kn.kubeClientset) if err != nil { return nil, err } @@ -226,14 +223,6 @@ func (kn *KnativeBackend) UpdateService(service types.Service) error { } } - //Create deaemonset to cache the service image on all the nodes - if service.ImagePrefetch { - err = imagepuller.CreateDaemonset(kn.config, service, kn.kubeClientset) - if err != nil { - return err - } - } - return nil } diff --git a/pkg/backends/knative_test.go b/pkg/backends/knative_test.go index 064da7af..d21f16b2 100644 --- a/pkg/backends/knative_test.go +++ b/pkg/backends/knative_test.go @@ -144,6 +144,17 @@ func TestKnativeListServices(t *testing.T) { []k8stesting.SimpleReactor{knServiceListReactor}, false, }, + { + "Error listing knative services", + []k8stesting.SimpleReactor{}, + []k8stesting.SimpleReactor{ + { + Verb: "list", + Resource: "services", + Reaction: errorReaction, + }}, + true, + }, { "Error getting the configMap", []k8stesting.SimpleReactor{ diff --git a/pkg/backends/openfaas.go b/pkg/backends/openfaas.go index 5743e21a..89ab0402 100644 --- a/pkg/backends/openfaas.go +++ b/pkg/backends/openfaas.go @@ -43,7 +43,7 @@ var errOpenfaasOperator = errors.New("the OpenFaaS Operator is not creating the // OpenfaasBackend struct to represent an Openfaas client type OpenfaasBackend struct { kubeClientset kubernetes.Interface - ofClientset ofclientset.Interface + ofClientset *ofclientset.Clientset namespace string gatewayEndpoint string scaler *utils.OpenfaasScaler @@ -83,20 +83,21 @@ func (of *OpenfaasBackend) GetInfo() *types.ServerlessBackendInfo { // ListServices returns a slice with all services registered in the provided namespace func (of *OpenfaasBackend) ListServices() ([]*types.Service, error) { - // Get the list with all Knative services - configmaps, err := getAllServicesConfigMaps(of.namespace, of.kubeClientset) + // Get the list with all deployments + deployments, err := of.kubeClientset.AppsV1().Deployments(of.namespace).List(context.TODO(), metav1.ListOptions{}) if err != nil { - log.Printf("WARNING: %v\n", err) return nil, err } - services := []*types.Service{} - for _, cm := range configmaps.Items { - service, err := getServiceFromConfigMap(&cm) + services := []*types.Service{} + for _, deployment := range deployments.Items { + // Get service from configMap's FDL + svc, err := getServiceFromFDL(deployment.Name, of.namespace, of.kubeClientset) if err != nil { - return nil, err + log.Printf("WARNING: %v\n", err) + } else { + services = append(services, svc) } - services = append(services, service) } return services, nil @@ -229,13 +230,8 @@ func (of *OpenfaasBackend) ReadService(name string) (*types.Service, error) { return nil, err } - // Get the configMap of the Service - cm, err := of.kubeClientset.CoreV1().ConfigMaps(of.namespace).Get(context.TODO(), name, metav1.GetOptions{}) - if err != nil { - return nil, fmt.Errorf("the service \"%s\" does not have a registered ConfigMap", name) - } // Get service from configMap's FDL - svc, err := getServiceFromConfigMap(cm) + svc, err := getServiceFromFDL(name, of.namespace, of.kubeClientset) if err != nil { return nil, err } diff --git a/pkg/backends/openfaas_test.go b/pkg/backends/openfaas_test.go deleted file mode 100644 index 4228a6b6..00000000 --- a/pkg/backends/openfaas_test.go +++ /dev/null @@ -1,326 +0,0 @@ -package backends - -import ( - "testing" - "time" - - "github.com/grycap/oscar/v3/pkg/types" - ofv1 "github.com/openfaas/faas-netes/pkg/apis/openfaas/v1" - ofclientset "github.com/openfaas/faas-netes/pkg/client/clientset/versioned/fake" - appsv1 "k8s.io/api/apps/v1" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/watch" - - "k8s.io/client-go/kubernetes/fake" - "k8s.io/client-go/rest" - k8stesting "k8s.io/client-go/testing" -) - -func TestMakeOpenfaasBackend(t *testing.T) { - kubeClientset := fake.NewSimpleClientset() - kubeConfig := &rest.Config{} - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - ofBackend := MakeOpenfaasBackend(kubeClientset, kubeConfig, cfg) - - if ofBackend.namespace != "default" { - t.Errorf("Expected namespace to be 'default', got '%s'", ofBackend.namespace) - } - if ofBackend.gatewayEndpoint != "gateway.openfaas:8080" { - t.Errorf("Expected gatewayEndpoint to be 'gateway.openfaas:8080', got '%s'", ofBackend.gatewayEndpoint) - } -} - -func TestGetInfo(t *testing.T) { - kubeClientset := fake.NewSimpleClientset() - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - ofClientset := ofclientset.NewSimpleClientset() - ofBackend := &OpenfaasBackend{ - kubeClientset: kubeClientset, - ofClientset: ofClientset, - namespace: cfg.ServicesNamespace, - config: cfg, - } - - info := ofBackend.GetInfo() - if info.Name != "OpenFaaS" { - t.Errorf("Expected Name to be 'OpenFaaS', got '%s'", info.Name) - } -} - -func TestCreateService(t *testing.T) { - ofClientset := ofclientset.NewSimpleClientset() - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - deployment := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: cfg.ServicesNamespace, - }, - } - kubeClientset := fake.NewSimpleClientset(deployment) - - ofBackend := &OpenfaasBackend{ - kubeClientset: kubeClientset, - ofClientset: ofClientset, - namespace: cfg.ServicesNamespace, - config: cfg, - } - - service := types.Service{ - Name: "test-service", - Image: "test-image", - Labels: map[string]string{ - "test": "label", - }, - } - - // Create a fake watcher - fakeWatcher := watch.NewFake() - - // Set up a reactor to intercept the Watch action and return the fake watcher - kubeClientset.PrependWatchReactor("deployments", func(action k8stesting.Action) (handled bool, ret watch.Interface, err error) { - return true, fakeWatcher, nil - }) - - // Run watcher in a goroutine - go func() { - // Simulate the creation of the deployment by triggering an event on the fake watcher - time.Sleep(1 * time.Second) // Ensure the CreateService method is waiting on the watcher - fakeWatcher.Add(&appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: service.Name, - Namespace: cfg.ServicesNamespace, - }, - }) - - // Allow some time for the CreateService method to process the event - time.Sleep(1 * time.Second) - }() - - err := ofBackend.CreateService(service) - if err != nil { - t.Errorf("Expected no error, got '%v'", err) - } - - actions := ofClientset.Actions() - if len(actions) != 1 { - t.Errorf("Expected 1 action, got %d", len(actions)) - } - if actions[0].GetResource().Resource != "functions" || actions[0].GetVerb() != "create" { - t.Errorf("Expected action to be 'create functions', got '%s %s'", actions[0].GetVerb(), actions[0].GetResource().Resource) - } -} - -func TestReadService(t *testing.T) { - ofClientset := ofclientset.NewSimpleClientset() - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - cm := &v1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: cfg.ServicesNamespace, - }, - Data: map[string]string{ - types.FDLFileName: `{"name": "test-service"}`, - types.ScriptFileName: "script.sh", - }, - } - deployment := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: cfg.ServicesNamespace, - }, - } - kubeClientset := fake.NewSimpleClientset(cm, deployment) - - ofBackend := &OpenfaasBackend{ - kubeClientset: kubeClientset, - ofClientset: ofClientset, - namespace: cfg.ServicesNamespace, - config: cfg, - } - - service, err := ofBackend.ReadService("test-service") - if err != nil { - t.Errorf("Expected no error, got '%v'", err) - } - if service.Name != "test-service" { - t.Errorf("Expected service name to be 'test-service', got '%s'", service.Name) - } -} - -func TestDeleteService(t *testing.T) { - - kubeClientset := fake.NewSimpleClientset() - offunction := &ofv1.Function{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: "default", - }, - Spec: ofv1.FunctionSpec{ - Image: "test-image", - }, - } - ofClientset := ofclientset.NewSimpleClientset(offunction) - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - ofBackend := &OpenfaasBackend{ - kubeClientset: kubeClientset, - ofClientset: ofClientset, - namespace: cfg.ServicesNamespace, - config: cfg, - } - - service := types.Service{ - Name: "test-service", - Image: "test-image", - } - - // Delete the service - err := ofBackend.DeleteService(service) - if err != nil { - t.Errorf("Expected no error, got '%v'", err) - } - - actions := ofClientset.Actions() - if len(actions) != 1 { - t.Errorf("Expected 1 action, got %d", len(actions)) - } - if actions[0].GetResource().Resource != "functions" || actions[0].GetVerb() != "delete" { - t.Errorf("Expected action to be 'delete functions', got '%s %s'", actions[0].GetVerb(), actions[0].GetResource().Resource) - } -} - -func TestUpdateService(t *testing.T) { - ofClientset := ofclientset.NewSimpleClientset() - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - oldCm := &v1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: cfg.ServicesNamespace, - }, - Data: map[string]string{ - types.FDLFileName: `{"name": "test-service"}`, - types.ScriptFileName: "script.sh", - }, - } - deployment := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: cfg.ServicesNamespace, - }, - } - kubeClientset := fake.NewSimpleClientset(oldCm, deployment) - - ofBackend := &OpenfaasBackend{ - kubeClientset: kubeClientset, - ofClientset: ofClientset, - namespace: cfg.ServicesNamespace, - config: cfg, - } - - service := types.Service{ - Name: "test-service", - Image: "test-image", - Labels: map[string]string{ - "test": "label", - }, - } - - err := ofBackend.UpdateService(service) - if err != nil { - t.Errorf("Expected no error, got '%v'", err) - } - - actions := kubeClientset.Actions() - if len(actions) != 4 { - t.Errorf("Expected 4 actions, got %d", len(actions)) - } - if actions[0].GetResource().Resource != "configmaps" || actions[0].GetVerb() != "get" { - t.Errorf("Expected action to be 'get configmaps', got '%s %s'", actions[0].GetVerb(), actions[0].GetResource().Resource) - } - if actions[1].GetResource().Resource != "configmaps" || actions[1].GetVerb() != "update" { - t.Errorf("Expected action to be 'update configmaps', got '%s %s'", actions[2].GetVerb(), actions[2].GetResource().Resource) - } - if actions[2].GetResource().Resource != "deployments" || actions[2].GetVerb() != "get" { - t.Errorf("Expected action to be 'get deployments', got '%s %s'", actions[2].GetVerb(), actions[2].GetResource().Resource) - } - if actions[3].GetResource().Resource != "deployments" || actions[3].GetVerb() != "update" { - t.Errorf("Expected action to be 'update deployments', got '%s %s'", actions[3].GetVerb(), actions[3].GetResource().Resource) - } -} - -func TestListServices(t *testing.T) { - cfg := &types.Config{ - ServicesNamespace: "default", - OpenfaasNamespace: "openfaas", - OpenfaasPort: 8080, - } - - ofClientset := ofclientset.NewSimpleClientset() - - cml := &v1.ConfigMapList{ - Items: []v1.ConfigMap{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "test-service", - Namespace: cfg.ServicesNamespace, - Labels: map[string]string{ - "oscar_service": "true", - }, - }, - Data: map[string]string{ - types.FDLFileName: `{"name": "test-service"}`, - types.ScriptFileName: "script.sh", - }, - }, - }, - } - kubeClientset := fake.NewSimpleClientset(cml) - - ofBackend := &OpenfaasBackend{ - kubeClientset: kubeClientset, - ofClientset: ofClientset, - namespace: cfg.ServicesNamespace, - config: cfg, - } - - services, err := ofBackend.ListServices() - if err != nil { - t.Errorf("Expected no error, got '%v'", err) - } - if len(services) != 1 { - t.Errorf("Expected 1 service, got %d", len(services)) - } - if services[0].Name != "test-service" { - t.Errorf("Expected service name to be 'test-service', got '%s'", services[0].Name) - } -} diff --git a/pkg/backends/serverlessbackend_test.go b/pkg/backends/serverlessbackend_test.go deleted file mode 100644 index 01af08c1..00000000 --- a/pkg/backends/serverlessbackend_test.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package backends - -import ( - "fmt" - "testing" - - "github.com/grycap/oscar/v3/pkg/types" - "k8s.io/client-go/kubernetes/fake" - "k8s.io/client-go/rest" -) - -func TestMakeServerlessBackend(t *testing.T) { - kubeClientset := fake.NewSimpleClientset() - kubeConfig := &rest.Config{} - - tests := []struct { - name string - serverlessBackend string - expectedBackendType string - }{ - { - name: "OpenFaaS Backend", - serverlessBackend: "openfaas", - expectedBackendType: "*backends.OpenfaasBackend", - }, - { - name: "Knative Backend", - serverlessBackend: "knative", - expectedBackendType: "*backends.KnativeBackend", - }, - { - name: "Default Kube Backend", - serverlessBackend: "unknown", - expectedBackendType: "*backends.KubeBackend", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - cfg := &types.Config{ - ServerlessBackend: tt.serverlessBackend, - } - backend := MakeServerlessBackend(kubeClientset, kubeConfig, cfg) - if backendType := fmt.Sprintf("%T", backend); backendType != tt.expectedBackendType { - t.Errorf("expected %s, got %s", tt.expectedBackendType, backendType) - } - }) - } -} diff --git a/pkg/handlers/config_test.go b/pkg/handlers/config_test.go deleted file mode 100644 index 7c74fcb5..00000000 --- a/pkg/handlers/config_test.go +++ /dev/null @@ -1,165 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package handlers - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "reflect" - "strings" - "testing" - - "bou.ke/monkey" - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/types" - "github.com/grycap/oscar/v3/pkg/utils/auth" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - testclient "k8s.io/client-go/kubernetes/fake" -) - -func createExpectedBody(access_key string, secret_key string, cfg *types.Config) map[string]interface{} { - return map[string]interface{}{ - "config": map[string]interface{}{ - "name": "", - "namespace": "", - "services_namespace": "", - "gpu_available": false, - "interLink_available": false, - "yunikorn_enable": false, - "oidc_groups": nil, - }, - "minio_provider": map[string]interface{}{ - "endpoint": cfg.MinIOProvider.Endpoint, - "verify": cfg.MinIOProvider.Verify, - "access_key": access_key, - "secret_key": secret_key, - "region": cfg.MinIOProvider.Region, - }, - } -} - -func TestMakeConfigHandler(t *testing.T) { - gin.SetMode(gin.TestMode) - - cfg := &types.Config{ - // Initialize with necessary fields - MinIOProvider: &types.MinIOProvider{ - Endpoint: "http://minio.example.com", - Verify: true, - Region: "us-east-1", - AccessKey: "accessKey1", - SecretKey: "secretKey1", - }, - } - - t.Run("Without Authorization Header", func(t *testing.T) { - router := gin.New() - router.GET("/config", MakeConfigHandler(cfg)) - - req, _ := http.NewRequest("GET", "/config", nil) - w := httptest.NewRecorder() - router.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - t.Fatalf("expected status code 200, got %d", w.Code) - } - if !strings.Contains(w.Body.String(), "http://minio.example.com") { - t.Fatalf("Unexpected response body") - } - - }) - - K8sObjects := []runtime.Object{ - &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "somelonguserid", - Namespace: auth.ServicesNamespace, - }, - Data: map[string][]byte{ - "accessKey": []byte("accessKey"), - "secretKey": []byte("secretKey"), - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - t.Run("With Bearer Authorization Header", func(t *testing.T) { - router := gin.New() - router.GET("/config", MakeConfigHandler(cfg)) - - req, _ := http.NewRequest("GET", "/config", nil) - req.Header.Set("Authorization", "Bearer some-token") - w := httptest.NewRecorder() - - // Mocking auth functions - monkey.Patch(auth.GetUIDFromContext, func(c *gin.Context) (string, error) { - return "somelonguserid@egi.eu", nil - }) - - monkey.Patch(auth.GetMultitenancyConfigFromContext, func(c *gin.Context) (*auth.MultitenancyConfig, error) { - return auth.NewMultitenancyConfig(kubeClientset, "somelonguserid@egi.eu"), nil - }) - - router.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - t.Fatalf("expected status code 200, got %d", w.Code) - } - - expected_body := createExpectedBody("accessKey", "secretKey", cfg) - - var responseBody map[string]interface{} - if err := json.Unmarshal(w.Body.Bytes(), &responseBody); err != nil { - t.Fatalf("Failed to parse response body: %v", err) - } - - if !reflect.DeepEqual(responseBody, expected_body) { - t.Fatalf("Unexpected response body: %s", w.Body.String()) - } - - defer monkey.Unpatch(auth.GetUIDFromContext) - defer monkey.Unpatch(auth.GetMultitenancyConfigFromContext) - }) - - t.Run("With Token Authorization Header", func(t *testing.T) { - router := gin.New() - router.GET("/config", MakeConfigHandler(cfg)) - - req, _ := http.NewRequest("GET", "/config", nil) - req.Header.Set("Authorization", "SomeToken") - w := httptest.NewRecorder() - router.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - t.Fatalf("expected status code 200, got %d", w.Code) - } - - expected_body := createExpectedBody("accessKey1", "secretKey1", cfg) - - var responseBody map[string]interface{} - if err := json.Unmarshal(w.Body.Bytes(), &responseBody); err != nil { - t.Fatalf("Failed to parse response body: %v", err) - } - - if !reflect.DeepEqual(responseBody, expected_body) { - t.Fatalf("Unexpected response body: %s", w.Body.String()) - } - }) -} diff --git a/pkg/handlers/create.go b/pkg/handlers/create.go index 30e16bdc..9d2bc194 100644 --- a/pkg/handlers/create.go +++ b/pkg/handlers/create.go @@ -40,7 +40,6 @@ const ( defaultMemory = "256Mi" defaultCPU = "0.2" defaultLogLevel = "INFO" - createPath = "/system/services" ) var errInput = errors.New("unrecognized input (valid inputs are MinIO and dCache)") @@ -57,7 +56,7 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand if len(strings.Split(authHeader, "Bearer")) == 1 { isAdminUser = true service.Owner = "cluster_admin" - createLogger.Printf("Creating service '%s' for user '%s'", service.Name, service.Owner) + createLogger.Printf("Creating service for user: %s", service.Owner) } if err := c.ShouldBindJSON(&service); err != nil { @@ -70,22 +69,25 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand // Check if users in allowed_users have a MinIO associated user minIOAdminClient, _ := utils.MakeMinIOAdminClient(cfg) + // === DEBUG code === + loguid, _ := auth.GetUIDFromContext(c) + createLogger.Printf(">>> uid from context: %s", loguid) + // ============= + // Service is created by an EGI user if !isAdminUser { uid, err := auth.GetUIDFromContext(c) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintln(err)) - return } // Set UID from owner service.Owner = uid - createLogger.Printf("Creating service '%s' for user '%s'", service.Name, service.Owner) + createLogger.Printf("Creating service for user: %s", service.Owner) mc, err := auth.GetMultitenancyConfigFromContext(c) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintln(err)) - return } full_uid := auth.FormatUID(uid) @@ -96,7 +98,6 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand err := checkIdentity(&service, cfg, authHeader) if err != nil { c.String(http.StatusBadRequest, fmt.Sprintln(err)) - return } break } @@ -122,7 +123,7 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand if !ownerOnList { service.AllowedUsers = append(service.AllowedUsers, uid) } - // Check if the uid's from allowed_users have and associated MinIO user + // Check if the uid's from allowed_users have and asociated MinIO user // and create it if not uids := mc.CheckUsersInCache(service.AllowedUsers) if len(uids) > 0 { @@ -170,11 +171,7 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand log.Println(err.Error()) } } - uid := service.Owner - if service.Owner == "" { - uid = "nil" - } - createLogger.Printf("%s | %v | %s | %s | %s", "POST", 200, createPath, service.Name, uid) + createLogger.Println("Service created with name: ", service.Name) c.Status(http.StatusCreated) } } @@ -287,7 +284,7 @@ func createBuckets(service *types.Service, cfg *types.Config, minIOAdminClient * // Create group for the service and add users // Check if users in allowed_users have a MinIO associated user - // If new allowed users list is empty the service becomes public + // If new allowed users list is empty the service becames public if !isUpdate { if !isAdminUser { if len(allowed_users) == 0 { diff --git a/pkg/handlers/create_test.go b/pkg/handlers/create_test.go deleted file mode 100644 index 912763dd..00000000 --- a/pkg/handlers/create_test.go +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package handlers - -import ( - "fmt" - "strings" - "testing" - - "net/http" - "net/http/httptest" - - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/backends" - "github.com/grycap/oscar/v3/pkg/types" - "github.com/grycap/oscar/v3/pkg/utils/auth" - testclient "k8s.io/client-go/kubernetes/fake" -) - -func TestMakeCreateHandler(t *testing.T) { - back := backends.MakeFakeBackend() - kubeClientset := testclient.NewSimpleClientset() - - // Create a fake MinIO server - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - - if hreq.URL.Path != "/test" && hreq.URL.Path != "/test/input/" && hreq.URL.Path != "/test/output/" && hreq.URL.Path != "/test/mount/" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { - t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) - } - - if hreq.URL.Path == "/minio/admin/v3/info" { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) - } else { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"status": "success"}`)) - } - })) - - // and set the MinIO endpoint to the fake server - cfg := types.Config{ - MinIOProvider: &types.MinIOProvider{ - Endpoint: server.URL, - Region: "us-east-1", - AccessKey: "minioadmin", - SecretKey: "minioadmin", - Verify: false, - }, - } - r := gin.Default() - r.Use(func(c *gin.Context) { - c.Set("uidOrigin", "somelonguid@egi.eu") - c.Set("multitenancyConfig", auth.NewMultitenancyConfig(kubeClientset, "somelonguid@egi.eu")) - c.Next() - }) - r.POST("/system/services", MakeCreateHandler(&cfg, back)) - - w := httptest.NewRecorder() - body := strings.NewReader(` - { - "name": "cowsay", - "cluster_id": "oscar", - "memory": "1Gi", - "cpu": "1.0", - "log_level": "CRITICAL", - "image": "ghcr.io/grycap/cowsay", - "alpine": false, - "script": "test", - "input": [ - { - "storage_provider": "minio", - "path": "/test/input/" - } - ], - "output": [ - { - "storage_provider": "minio", - "path": "/test/output" - } - ], - "mount": { - "storage_provider": "minio", - "path": "/test/mount" - }, - "storage_providers": { - "webdav": { - "id": { - "hostname": "` + server.URL + `", - "login": "user", - "password": "pass" - } - } - }, - "allowed_users": ["somelonguid@egi.eu", "somelonguid2@egi.eu"] - } - `) - - req, _ := http.NewRequest("POST", "/system/services", body) - req.Header.Add("Authorization", "Bearer token") - r.ServeHTTP(w, req) - - // Close the fake MinIO server - defer server.Close() - - if w.Code != http.StatusCreated { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusCreated, w.Code) - } -} diff --git a/pkg/handlers/delete_test.go b/pkg/handlers/delete_test.go deleted file mode 100644 index 2f6bb0ca..00000000 --- a/pkg/handlers/delete_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package handlers - -import ( - "errors" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/backends" - "github.com/grycap/oscar/v3/pkg/types" - k8serr "k8s.io/apimachinery/pkg/api/errors" -) - -func TestMakeDeleteHandler(t *testing.T) { - back := backends.MakeFakeBackend() - - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path != "/input" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { - t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) - } - })) - - // and set the MinIO endpoint to the fake server - cfg := types.Config{ - MinIOProvider: &types.MinIOProvider{ - Endpoint: server.URL, - Region: "us-east-1", - AccessKey: "minioadmin", - SecretKey: "minioadmin", - Verify: false, - }, - } - - svc := &types.Service{ - Token: "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf", - Input: []types.StorageIOConfig{ - {Provider: "minio." + types.DefaultProvider, Path: "/input"}, - }, - Output: []types.StorageIOConfig{ - {Provider: "minio." + types.DefaultProvider, Path: "/output"}, - }, - StorageProviders: &types.StorageProviders{ - MinIO: map[string]*types.MinIOProvider{types.DefaultProvider: { - Region: "us-east-1", - Endpoint: server.URL, - AccessKey: "ak", - SecretKey: "sk"}}, - }} - back.Service = svc - - r := gin.Default() - r.DELETE("/system/services/:serviceName", MakeDeleteHandler(&cfg, back)) - - scenarios := []struct { - name string - returnError bool - errType string - }{ - {"valid", false, ""}, - {"Service Not Found test", true, "404"}, - {"Internal Server Error test", true, "500"}, - } - - for _, s := range scenarios { - t.Run(s.name, func(t *testing.T) { - w := httptest.NewRecorder() - - if s.returnError { - switch s.errType { - case "404": - back.AddError("DeleteService", k8serr.NewGone("Not Found")) - case "500": - err := errors.New("Not found") - back.AddError("DeleteService", k8serr.NewInternalError(err)) - } - } - serviceName := "testName" - req, _ := http.NewRequest("DELETE", "/system/services/"+serviceName, nil) - - r.ServeHTTP(w, req) - - if s.returnError { - if s.errType == "404" && w.Code != http.StatusNotFound { - t.Errorf("expecting code %d, got %d", http.StatusNotFound, w.Code) - } - - if s.errType == "500" && w.Code != http.StatusInternalServerError { - t.Errorf("expecting code %d, got %d", http.StatusInternalServerError, w.Code) - } - } else { - if w.Code != http.StatusNoContent { - t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) - } - } - }) - } - - // Close the fake MinIO server - defer server.Close() -} diff --git a/pkg/handlers/health_test.go b/pkg/handlers/health_test.go deleted file mode 100644 index ca405ad4..00000000 --- a/pkg/handlers/health_test.go +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package handlers - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/gin-gonic/gin" -) - -func TestHealthHandler(t *testing.T) { - // Set up the Gin router - router := gin.Default() - router.GET("/health", HealthHandler) - - // Create a request to send to the above route - req, _ := http.NewRequest("GET", "/health", nil) - - // Create a response recorder to record the response - w := httptest.NewRecorder() - - // Perform the request - router.ServeHTTP(w, req) - - // Check the status code is what we expect - if w.Code != http.StatusOK { - t.Errorf("expected status OK, got %v", w.Code) - } - - // Check the response body is what we expect - if w.Body.String() != "Ok" { - t.Errorf("expected body 'Ok', got %v", w.Body.String()) - } -} diff --git a/pkg/handlers/job.go b/pkg/handlers/job.go index e0319d63..1fa48b5b 100644 --- a/pkg/handlers/job.go +++ b/pkg/handlers/job.go @@ -18,12 +18,11 @@ package handlers import ( "context" - "encoding/json" + "encoding/base64" "fmt" "io" "log" "net/http" - "os" "strconv" "strings" @@ -31,8 +30,6 @@ import ( "github.com/google/uuid" "github.com/grycap/oscar/v3/pkg/resourcemanager" "github.com/grycap/oscar/v3/pkg/types" - "github.com/grycap/oscar/v3/pkg/utils/auth" - genericErrors "github.com/pkg/errors" batchv1 "k8s.io/api/batch/v1" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -47,8 +44,7 @@ var ( // Don't restart jobs in order to keep logs restartPolicy = v1.RestartPolicyNever // command used for passing the event to faas-supervisor - command = []string{"/bin/sh"} - jobLogger = log.New(os.Stdout, "[JOB-HANDLER] ", log.Flags()) + command = []string{"/bin/sh"} ) const ( @@ -62,8 +58,8 @@ const ( InterLinkTolerationOperator = "Exists" ) -// MakeJobHandler makes a handler to manage async invocations -func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back types.ServerlessBackend, rm resourcemanager.ResourceManager) gin.HandlerFunc { +// MakeJobHandler makes a han/home/slangarita/Escritorio/interlink-cluster/PodCern/PodCern.yamldler to manage async invocations +func MakeJobHandler(cfg *types.Config, kubeClientset *kubernetes.Clientset, back types.ServerlessBackend, rm resourcemanager.ResourceManager) gin.HandlerFunc { return func(c *gin.Context) { service, err := back.ReadService(c.Param("serviceName")) if err != nil { @@ -90,45 +86,10 @@ func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back c.Status(http.StatusUnauthorized) return } - - // Check if reqToken is the service token - rawToken := strings.TrimSpace(splitToken[1]) - if len(rawToken) == tokenLength { - - if rawToken != service.Token { - c.Status(http.StatusUnauthorized) - return - } - } - - // If isn't service token check if it is an oidc token - var uidFromToken string - if len(rawToken) != tokenLength { - oidcManager, _ := auth.NewOIDCManager(cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups) - - if !oidcManager.IsAuthorised(rawToken) { - c.Status(http.StatusUnauthorized) - return - } - - hasVO, err := oidcManager.UserHasVO(rawToken, service.VO) - - if err != nil { - c.String(http.StatusInternalServerError, err.Error()) - return - } - - if !hasVO { - c.String(http.StatusUnauthorized, "this user isn't enrrolled on the vo: %v", service.VO) - return - } - - // Get UID from token - var uidErr error - uidFromToken, uidErr = oidcManager.GetUID(rawToken) - if uidErr != nil { - jobLogger.Println("WARNING:", uidErr) - } + reqToken := strings.TrimSpace(splitToken[1]) + if reqToken != service.Token { + c.Status(http.StatusUnauthorized) + return } // Get the event from request body @@ -138,48 +99,37 @@ func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back return } - // Check if it has the MinIO event format - uid, sourceIPAddress, err := decodeEventBytes(eventBytes) - if err != nil { - // Check if the request was made with OIDC token to get user UID - if uidFromToken != "" { - c.Set("uidOrigin", uidFromToken) - } else { - // Set as nil string if unable to get an UID - jobLogger.Println("WARNING:", err) - c.Set("uidOrigin", "nil") - } - } else { - c.Set("IPAddress", sourceIPAddress) - c.Set("uidOrigin", uid) - } - - c.Next() - - // Initialize event envVar and args var + // Make event envVar event := v1.EnvVar{} - var args []string + var args string if cfg.InterLinkAvailable && service.InterLinkNodeName != "" { - command, event, args = types.SetInterlinkJob(podSpec, service, cfg, eventBytes) - } else { - - if service.Mount.Provider != "" { - args = []string{"-c", fmt.Sprintf("echo $%s | %s", types.EventVariable, service.GetSupervisorPath()) + ";echo \"I finish\" > /tmpfolder/finish-file;"} - types.SetMount(podSpec, *service, cfg) - } else { - args = []string{"-c", fmt.Sprintf("echo $%s | %s", types.EventVariable, service.GetSupervisorPath())} + event = v1.EnvVar{ + Name: types.EventVariable, + Value: base64.StdEncoding.EncodeToString([]byte(eventBytes)), } - + args = fmt.Sprintf("\" wget %s -O %s && chmod 0755 %s && echo \\$%s | base64 -d | %s \"", cfg.SupervisorURL, SupervisorPath, SupervisorPath, types.EventVariable, SupervisorPath) + podSpec.NodeSelector = map[string]string{ + NodeSelectorKey: service.InterLinkNodeName, + } + podSpec.DNSPolicy = InterLinkDNSPolicy + podSpec.RestartPolicy = InterLinkRestartPolicy + podSpec.Tolerations = []v1.Toleration{ + { + Key: InterLinkTolerationKey, + Operator: InterLinkTolerationOperator, + }, + } + } else { event = v1.EnvVar{ Name: types.EventVariable, Value: string(eventBytes), } + args = fmt.Sprintf("echo $%s | %s", types.EventVariable, service.GetSupervisorPath()) } // Make JOB_UUID envVar jobUUID := uuid.New().String() - jobUUID = service.Name + "-" + jobUUID jobUUIDVar := v1.EnvVar{ Name: types.JobUUIDVariable, Value: jobUUID, @@ -200,12 +150,16 @@ func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back for i, c := range podSpec.Containers { if c.Name == types.ContainerName { podSpec.Containers[i].Command = command - podSpec.Containers[i].Args = args + podSpec.Containers[i].Args = []string{"-c", args} podSpec.Containers[i].Env = append(podSpec.Containers[i].Env, event) podSpec.Containers[i].Env = append(podSpec.Containers[i].Env, jobUUIDVar) podSpec.Containers[i].Env = append(podSpec.Containers[i].Env, resourceIDVar) } } + if service.Mount.Provider != "" { + types.SetMount(podSpec, *service, cfg) + podSpec.Containers[0].Args = []string{"-c", args + ";echo \"I finish\" > /tmpfolder/finish-file;"} + } // Delegate job if can't be scheduled and has defined replicas if rm != nil && service.HasReplicas() { @@ -216,7 +170,7 @@ func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back c.Status(http.StatusCreated) return } - jobLogger.Printf("unable to delegate job. Error: %v\n", err) + log.Printf("unable to delegate job. Error: %v\n", err) } } @@ -251,6 +205,7 @@ func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back } } + // Create job _, err = kubeClientset.BatchV1().Jobs(cfg.ServicesNamespace).Create(context.TODO(), job, metav1.CreateOptions{}) if err != nil { c.String(http.StatusInternalServerError, err.Error()) @@ -259,31 +214,3 @@ func MakeJobHandler(cfg *types.Config, kubeClientset kubernetes.Interface, back c.Status(http.StatusCreated) } } - -func decodeEventBytes(eventBytes []byte) (string, string, error) { - - defer func() { - // recover from panic, if one occurs - if r := recover(); r != nil { - jobLogger.Println("Recovered from panic:", r) - } - }() - // Extract user UID from MinIO event - var decoded map[string]interface{} - if err := json.Unmarshal(eventBytes, &decoded); err != nil { - return "", "", err - } - - if records, panicErr := decoded["Records"].([]interface{}); panicErr { - r := records[0].(map[string]interface{}) - - eventInfo := r["requestParameters"].(map[string]interface{}) - uid := eventInfo["principalId"] - sourceIPAddress := eventInfo["sourceIPAddress"] - - return uid.(string), sourceIPAddress.(string), nil - } else { - return "", "", genericErrors.New("Failed to decode records") - } - -} diff --git a/pkg/handlers/job_test.go b/pkg/handlers/job_test.go deleted file mode 100644 index 6150617a..00000000 --- a/pkg/handlers/job_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package handlers - -import ( - "fmt" - "net/http" - "net/http/httptest" - "strings" - "testing" - - testclient "k8s.io/client-go/kubernetes/fake" - - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/backends" - "github.com/grycap/oscar/v3/pkg/types" -) - -func TestMakeJobHandler(t *testing.T) { - back := backends.MakeFakeBackend() - cfg := types.Config{} - kubeClient := testclient.NewSimpleClientset() - - r := gin.Default() - r.POST("/job/:serviceName", MakeJobHandler(&cfg, kubeClient, back, nil)) - - w := httptest.NewRecorder() - body := strings.NewReader(`{"Records": [{"requestParameters": {"principalId": "uid", "sourceIPAddress": "ip"}}]}`) - serviceName := "testName" - req, _ := http.NewRequest("POST", "/job/services"+serviceName, body) - req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") - r.ServeHTTP(w, req) - - if w.Code != http.StatusCreated { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusCreated, w.Code) - } - - actions := kubeClient.Actions() - if len(actions) != 1 { - t.Errorf("Expected 1 action but got %d", len(actions)) - } - if actions[0].GetVerb() != "create" || actions[0].GetResource().Resource != "jobs" { - t.Errorf("Expected create job action but got %v", actions[0]) - } -} diff --git a/pkg/handlers/list.go b/pkg/handlers/list.go index ba8ae64e..2a5cb130 100644 --- a/pkg/handlers/list.go +++ b/pkg/handlers/list.go @@ -19,7 +19,6 @@ package handlers import ( "fmt" "net/http" - "slices" "strings" "github.com/gin-gonic/gin" @@ -43,13 +42,19 @@ func MakeListHandler(back types.ServerlessBackend) gin.HandlerFunc { uid, err := auth.GetUIDFromContext(c) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintln(err)) - return } var allowedServicesForUser []*types.Service for _, service := range services { - if len(service.AllowedUsers) == 0 || slices.Contains(service.AllowedUsers, uid) { + if len(service.AllowedUsers) == 0 { allowedServicesForUser = append(allowedServicesForUser, service) + continue + } + for _, id := range service.AllowedUsers { + if uid == id { + allowedServicesForUser = append(allowedServicesForUser, service) + break + } } } diff --git a/pkg/handlers/logs.go b/pkg/handlers/logs.go index cc809827..5767af31 100644 --- a/pkg/handlers/logs.go +++ b/pkg/handlers/logs.go @@ -35,7 +35,7 @@ import ( // TODO Try using cookies to avoid excesive calls to the k8s API // // MakeJobsInfoHandler makes a handler for listing all existing jobs from a service and show their JobInfo -func MakeJobsInfoHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { +func MakeJobsInfoHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { return func(c *gin.Context) { jobsInfo := make(map[string]*types.JobInfo) // Get serviceName @@ -103,7 +103,7 @@ func MakeJobsInfoHandler(back types.ServerlessBackend, kubeClientset kubernetes. // MakeDeleteJobsHandler makes a handler for deleting all jobs created by the provided service. // If 'all' querystring is set to 'true' pending, running and failed jobs will also be deleted -func MakeDeleteJobsHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { +func MakeDeleteJobsHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { return func(c *gin.Context) { // Get serviceName and jobName serviceName := c.Param("serviceName") @@ -147,7 +147,7 @@ func MakeDeleteJobsHandler(back types.ServerlessBackend, kubeClientset kubernete } // MakeGetLogsHandler makes a handler for getting logs from the 'oscar-container' inside the pod created by the specified job -func MakeGetLogsHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { +func MakeGetLogsHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { return func(c *gin.Context) { // Get serviceName and jobName serviceName := c.Param("serviceName") @@ -200,7 +200,7 @@ func MakeGetLogsHandler(back types.ServerlessBackend, kubeClientset kubernetes.I } // MakeDeleteJobHandler makes a handler for removing a job -func MakeDeleteJobHandler(back types.ServerlessBackend, kubeClientset kubernetes.Interface, namespace string) gin.HandlerFunc { +func MakeDeleteJobHandler(back types.ServerlessBackend, kubeClientset *kubernetes.Clientset, namespace string) gin.HandlerFunc { return func(c *gin.Context) { // Get serviceName and jobName serviceName := c.Param("serviceName") @@ -251,7 +251,7 @@ func isOIDCAuthorised(c *gin.Context, back types.ServerlessBackend, serviceName // If is oidc auth get service and check on allowed users authHeader := c.GetHeader("Authorization") if len(strings.Split(authHeader, "Bearer")) > 1 { - service, _ := back.ReadService(serviceName) + service, _ := back.ReadService(c.Param("serviceName")) uid, err := auth.GetUIDFromContext(c) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintln(err)) diff --git a/pkg/handlers/logs_test.go b/pkg/handlers/logs_test.go deleted file mode 100644 index e500a29e..00000000 --- a/pkg/handlers/logs_test.go +++ /dev/null @@ -1,234 +0,0 @@ -package handlers - -import ( - "encoding/json" - "fmt" - "net/http" - "net/http/httptest" - "reflect" - "testing" - "time" - - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/backends" - "github.com/grycap/oscar/v3/pkg/types" - batchv1 "k8s.io/api/batch/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - testclient "k8s.io/client-go/kubernetes/fake" -) - -func TestMakeJobsInfoHandler(t *testing.T) { - back := backends.MakeFakeBackend() - now := time.Now() - - K8sObjects := []runtime.Object{ - &batchv1.Job{ - Status: batchv1.JobStatus{ - StartTime: &metav1.Time{Time: now}, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "job", - Namespace: "namespace", - Labels: map[string]string{ - types.ServiceLabel: "test", - }, - }, - }, - &corev1.PodList{ - Items: []corev1.Pod{ - { - Status: corev1.PodStatus{ - Phase: corev1.PodRunning, - ContainerStatuses: []corev1.ContainerStatus{ - { - Name: types.ContainerName, - State: corev1.ContainerState{ - Running: &corev1.ContainerStateRunning{ - StartedAt: metav1.Time{Time: now}, - }, - }, - }, - }, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "pod", - Namespace: "namespace", - Labels: map[string]string{ - "oscar_service": "test", - "job-name": "job"}, - }, - }, - }, - }, - } - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - - r := gin.Default() - r.GET("/system/logs/:serviceName", MakeJobsInfoHandler(back, kubeClientset, "namespace")) - - w := httptest.NewRecorder() - serviceName := "test" - req, _ := http.NewRequest("GET", "/system/logs/"+serviceName, nil) - r.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusOK, w.Code) - } - - var response map[string]interface{} - if err := json.Unmarshal(w.Body.Bytes(), &response); err != nil { - t.Errorf("response is not valid JSON: %v", err) - } - - expected := map[string]interface{}{ - "job": map[string]interface{}{ - "status": "Running", - "creation_time": now.UTC().Format(time.RFC3339), - "start_time": now.UTC().Format(time.RFC3339), - }, - } - - if !reflect.DeepEqual(response, expected) { - t.Errorf("expecting %v, got %v", expected, response) - } - - actions := kubeClientset.Actions() - if len(actions) != 2 { - t.Errorf("expecting 2 actions, got %d", len(actions)) - } - - if actions[0].GetVerb() != "list" || actions[0].GetResource().Resource != "jobs" { - t.Errorf("expecting list jobs, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) - } - if actions[1].GetVerb() != "list" || actions[1].GetResource().Resource != "pods" { - t.Errorf("expecting list pods, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) - } -} - -func TestMakeDeleteJobsHandler(t *testing.T) { - back := backends.MakeFakeBackend() - kubeClientset := testclient.NewSimpleClientset() - - r := gin.Default() - r.DELETE("/system/logs/:serviceName", MakeDeleteJobsHandler(back, kubeClientset, "namespace")) - - w := httptest.NewRecorder() - serviceName := "test" - req, _ := http.NewRequest("DELETE", "/system/logs/"+serviceName, nil) - r.ServeHTTP(w, req) - - if w.Code != http.StatusNoContent { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) - } - - actions := kubeClientset.Actions() - if len(actions) != 1 { - t.Errorf("expecting 1 actions, got %d", len(actions)) - } - - if actions[0].GetVerb() != "delete-collection" || actions[0].GetResource().Resource != "jobs" { - t.Errorf("expecting list jobs, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) - } -} - -func TestMakeGetLogsHandler(t *testing.T) { - back := backends.MakeFakeBackend() - - K8sObjects := []runtime.Object{ - &corev1.PodList{ - Items: []corev1.Pod{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "pod", - Namespace: "namespace", - Labels: map[string]string{ - "oscar_service": "test", - "job-name": "job"}, - }, - }, - }, - }, - } - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - - r := gin.Default() - r.GET("/system/logs/:serviceName/:jobName", MakeGetLogsHandler(back, kubeClientset, "namespace")) - - w := httptest.NewRecorder() - serviceName := "test" - jobName := "job" - req, _ := http.NewRequest("GET", "/system/logs/"+serviceName+"/"+jobName, nil) - r.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusOK, w.Code) - } - if w.Body.String() != "fake logs" { - t.Errorf("expecting 'fake logs', got %s", w.Body.String()) - } - - actions := kubeClientset.Actions() - if len(actions) != 2 { - t.Errorf("expecting 2 actions, got %d", len(actions)) - } - - if actions[0].GetVerb() != "list" || actions[0].GetResource().Resource != "pods" { - t.Errorf("expecting list pods, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) - } - if actions[1].GetVerb() != "get" || actions[1].GetResource().Resource != "pods" { - t.Errorf("expecting get pods, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) - } -} -func TestMakeDeleteJobHandler(t *testing.T) { - back := backends.MakeFakeBackend() - - K8sObjects := []runtime.Object{ - &batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{ - Name: "job", - Namespace: "namespace", - Labels: map[string]string{ - types.ServiceLabel: "test", - }, - }, - }, - } - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - - r := gin.Default() - r.Use(func(c *gin.Context) { - c.Set("uidOrigin", "some-uid-value") - c.Next() - }) - r.DELETE("/system/logs/:serviceName/:jobName", MakeDeleteJobHandler(back, kubeClientset, "namespace")) - - w := httptest.NewRecorder() - serviceName := "test" - jobName := "job" - req, _ := http.NewRequest("DELETE", "/system/logs/"+serviceName+"/"+jobName, nil) - req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") - r.ServeHTTP(w, req) - - if w.Code != http.StatusNoContent { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) - } - - actions := kubeClientset.Actions() - if len(actions) != 2 { - t.Errorf("expecting 2 actions, got %d", len(actions)) - } - - if actions[0].GetVerb() != "get" || actions[0].GetResource().Resource != "jobs" { - t.Errorf("expecting get jobs, got %s %s", actions[0].GetVerb(), actions[0].GetResource().Resource) - } - - if actions[1].GetVerb() != "delete" || actions[1].GetResource().Resource != "jobs" { - t.Errorf("expecting delete jobs, got %s %s", actions[1].GetVerb(), actions[1].GetResource().Resource) - } -} diff --git a/pkg/handlers/run.go b/pkg/handlers/run.go index ee7dec56..f289713a 100644 --- a/pkg/handlers/run.go +++ b/pkg/handlers/run.go @@ -23,14 +23,9 @@ import ( "github.com/gin-gonic/gin" "github.com/grycap/oscar/v3/pkg/types" - "github.com/grycap/oscar/v3/pkg/utils/auth" "k8s.io/apimachinery/pkg/api/errors" ) -const ( - tokenLength = 64 -) - // MakeRunHandler makes a handler to manage sync invocations sending them to the gateway of the ServerlessBackend func MakeRunHandler(cfg *types.Config, back types.SyncBackend) gin.HandlerFunc { return func(c *gin.Context) { @@ -52,44 +47,10 @@ func MakeRunHandler(cfg *types.Config, back types.SyncBackend) gin.HandlerFunc { c.Status(http.StatusUnauthorized) return } - - // Check if reqToken is the service token - rawToken := strings.TrimSpace(splitToken[1]) - if len(rawToken) == tokenLength { - - if rawToken != service.Token { - c.Status(http.StatusUnauthorized) - return - } - } else { - oidcManager, _ := auth.NewOIDCManager(cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups) - - if !oidcManager.IsAuthorised(rawToken) { - c.Status(http.StatusUnauthorized) - return - } - - hasVO, err := oidcManager.UserHasVO(rawToken, service.VO) - - if err != nil { - c.String(http.StatusInternalServerError, err.Error()) - return - } - - if !hasVO { - c.String(http.StatusUnauthorized, "this user isn't enrrolled on the vo: %v", service.VO) - return - } - - ui, err := oidcManager.GetUserInfo(rawToken) - if err != nil { - c.String(http.StatusInternalServerError, err.Error()) - return - } - uid := ui.Subject - c.Set("uidOrigin", uid) - c.Next() - + reqToken := strings.TrimSpace(splitToken[1]) + if reqToken != service.Token { + c.Status(http.StatusUnauthorized) + return } proxy := &httputil.ReverseProxy{ diff --git a/pkg/handlers/run_test.go b/pkg/handlers/run_test.go index 3d9d647d..e1b9e626 100644 --- a/pkg/handlers/run_test.go +++ b/pkg/handlers/run_test.go @@ -63,10 +63,10 @@ func TestMakeRunHandler(t *testing.T) { for _, s := range scenarios { t.Run(s.name, func(t *testing.T) { w := httptest.NewRecorder() - serviceName := "testName" + serviceName := "test" req, _ := http.NewRequest("POST", "/run/"+serviceName, nil) - req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") + req.Header.Set("Authorization", "Bearer AbCdEf123456") if s.returnError { switch s.errType { @@ -76,9 +76,9 @@ func TestMakeRunHandler(t *testing.T) { err := errors.New("Not found") back.AddError("ReadService", k8serr.NewInternalError(err)) case "splitErr": - req.Header.Set("Authorization", "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf") + req.Header.Set("Authorization", "AbCdEf123456") case "diffErr": - req.Header.Set("Authorization", "Bearer 11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513dfg") + req.Header.Set("Authorization", "Bearer AbC123456") } } diff --git a/pkg/handlers/status.go b/pkg/handlers/status.go index 17fed02b..52061ecb 100644 --- a/pkg/handlers/status.go +++ b/pkg/handlers/status.go @@ -49,7 +49,7 @@ type NodeInfo struct { } // MakeStatusHandler Status handler for kubernetes deployment. -func MakeStatusHandler(kubeClientset kubernetes.Interface, metricsClientset versioned.MetricsV1beta1Interface) gin.HandlerFunc { +func MakeStatusHandler(kubeClientset *kubernetes.Clientset, metricsClientset *versioned.MetricsV1beta1Client) gin.HandlerFunc { return func(c *gin.Context) { // Get nodes list nodes, err := kubeClientset.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{}) diff --git a/pkg/handlers/status_test.go b/pkg/handlers/status_test.go deleted file mode 100644 index d211583f..00000000 --- a/pkg/handlers/status_test.go +++ /dev/null @@ -1,132 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package handlers - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "reflect" - "testing" - - "github.com/gin-gonic/gin" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/kubernetes/fake" - k8stesting "k8s.io/client-go/testing" - metricsv1beta1api "k8s.io/metrics/pkg/apis/metrics/v1beta1" - metricsfake "k8s.io/metrics/pkg/client/clientset/versioned/fake" -) - -func TestMakeStatusHandler(t *testing.T) { - // Create a fake Kubernetes clientset - kubeClientset := fake.NewSimpleClientset( - &v1.NodeList{ - Items: []v1.Node{ - { - ObjectMeta: metav1.ObjectMeta{Name: "node1"}, - Status: v1.NodeStatus{ - Allocatable: v1.ResourceList{ - "cpu": *resource.NewMilliQuantity(2000, resource.DecimalSI), - "memory": *resource.NewQuantity(8*1024*1024*1024, resource.BinarySI), - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "node2"}, - Status: v1.NodeStatus{ - Allocatable: v1.ResourceList{ - "cpu": *resource.NewMilliQuantity(4000, resource.DecimalSI), - "memory": *resource.NewQuantity(16*1024*1024*1024, resource.BinarySI), - }, - }, - }, - }, - }, - ) - - // Create a fake Metrics clientset - metricsClientset := metricsfake.NewSimpleClientset() - // Add NodeMetrics objects to the fake clientset's store - metricsClientset.Fake.PrependReactor("list", "nodes", func(action k8stesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &metricsv1beta1api.NodeMetricsList{ - Items: []metricsv1beta1api.NodeMetrics{ - { - ObjectMeta: metav1.ObjectMeta{Name: "node1"}, - Usage: v1.ResourceList{ - "cpu": *resource.NewMilliQuantity(1000, resource.DecimalSI), - "memory": *resource.NewQuantity(4*1024*1024*1024, resource.BinarySI), - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "node2"}, - Usage: v1.ResourceList{ - "cpu": *resource.NewMilliQuantity(2000, resource.DecimalSI), - "memory": *resource.NewQuantity(8*1024*1024*1024, resource.BinarySI), - }, - }, - }, - }, nil - }) - - // Create a new Gin router - router := gin.Default() - router.GET("/status", MakeStatusHandler(kubeClientset, metricsClientset.MetricsV1beta1())) - - // Create a new HTTP request - req, _ := http.NewRequest("GET", "/status", nil) - w := httptest.NewRecorder() - - // Perform the request - router.ServeHTTP(w, req) - - // Check the response - if w.Code != http.StatusOK { - t.Errorf("Expected status code %d, but got %d", http.StatusOK, w.Code) - } - - var jsonResponse map[string]interface{} - err := json.Unmarshal(w.Body.Bytes(), &jsonResponse) - if err != nil { - t.Fatalf("Failed to unmarshal response: %v", err) - } - - expectedResponse := map[string]interface{}{ - "numberNodes": 1.0, - "cpuFreeTotal": 2000.0, - "cpuMaxFree": 2000.0, - "memoryFreeTotal": 16.0 * 1024 * 1024 * 1024, - "memoryMaxFree": 8.0 * 1024 * 1024 * 1024, - "detail": []interface{}{ - map[string]interface{}{ - "nodeName": "node2", - "cpuCapacity": "4000", - "cpuUsage": "2000", - "cpuPercentage": "50.00", - "memoryCapacity": "17179869184", - "memoryUsage": "8589934592", - "memoryPercentage": "50.00", - }, - }, - } - - if !reflect.DeepEqual(jsonResponse, expectedResponse) { - t.Errorf("Expected response %v, but got %v", expectedResponse, jsonResponse) - } -} diff --git a/pkg/handlers/update.go b/pkg/handlers/update.go index e7dea13e..6a5a96f0 100644 --- a/pkg/handlers/update.go +++ b/pkg/handlers/update.go @@ -45,11 +45,7 @@ func MakeUpdateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand // Check service values and set defaults checkValues(&newService, cfg) - authHeader := c.GetHeader("Authorization") - if len(strings.Split(authHeader, "Bearer")) == 1 { - isAdminUser = true - createLogger.Printf("[*] Updating service as admin user") - } + // Read the current service oldService, err := back.ReadService(newService.Name) @@ -62,34 +58,34 @@ func MakeUpdateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand } return } - if !isAdminUser { - uid, err := auth.GetUIDFromContext(c) - if err != nil { - c.String(http.StatusInternalServerError, fmt.Sprintln("Couldn't get UID from context")) - } - if oldService.Owner != uid { - c.String(http.StatusForbidden, "User %s doesn't have permision to modify this service", uid) - return - } + uid, err := auth.GetUIDFromContext(c) + if err != nil { + c.String(http.StatusInternalServerError, fmt.Sprintln("Couldn't get UID from context")) + } - // Set the owner on the new service definition - newService.Owner = oldService.Owner + if oldService.Owner != uid { + c.String(http.StatusForbidden, "User %s doesn't have permision to modify this service", uid) + return + } - // If the service has changed VO check permission again - if newService.VO != "" && newService.VO != oldService.VO { - for _, vo := range cfg.OIDCGroups { - if vo == newService.VO { - authHeader := c.GetHeader("Authorization") - err := checkIdentity(&newService, cfg, authHeader) - if err != nil { - c.String(http.StatusBadRequest, fmt.Sprintln(err)) - } - break + // Set the owner on the new service definition + newService.Owner = oldService.Owner + + // If the service has changed VO check permisions again + if newService.VO != "" && newService.VO != oldService.VO { + for _, vo := range cfg.OIDCGroups { + if vo == newService.VO { + authHeader := c.GetHeader("Authorization") + err := checkIdentity(&newService, cfg, authHeader) + if err != nil { + c.String(http.StatusBadRequest, fmt.Sprintln(err)) } + break } } } + minIOAdminClient, _ := utils.MakeMinIOAdminClient(cfg) // Update the service if err := back.UpdateService(newService); err != nil { diff --git a/pkg/handlers/update_test.go b/pkg/handlers/update_test.go deleted file mode 100644 index 034b3fed..00000000 --- a/pkg/handlers/update_test.go +++ /dev/null @@ -1,114 +0,0 @@ -package handlers - -import ( - "fmt" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/backends" - "github.com/grycap/oscar/v3/pkg/types" -) - -func TestMakeUpdateHandler(t *testing.T) { - back := backends.MakeFakeBackend() - - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path != "/input" && hreq.URL.Path != "/output" && !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { - t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) - } - if hreq.URL.Path == "/minio/admin/v3/info" { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) - } else { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"status": "success"}`)) - } - })) - - svc := &types.Service{ - Token: "11e387cf727630d899925d57fceb4578f478c44be6cde0ae3fe886d8be513acf", - Input: []types.StorageIOConfig{ - {Provider: "minio." + types.DefaultProvider, Path: "/input"}, - }, - Output: []types.StorageIOConfig{ - {Provider: "minio." + types.DefaultProvider, Path: "/output"}, - }, - StorageProviders: &types.StorageProviders{ - MinIO: map[string]*types.MinIOProvider{types.DefaultProvider: { - Region: "us-east-1", - Endpoint: server.URL, - AccessKey: "ak", - SecretKey: "sk"}}, - }, - Owner: "somelonguid@egi.eu", - AllowedUsers: []string{"somelonguid1@egi.eu"}} - back.Service = svc - - // and set the MinIO endpoint to the fake server - cfg := types.Config{ - MinIOProvider: &types.MinIOProvider{ - Region: "us-east-1", - Endpoint: server.URL, - AccessKey: "ak", - SecretKey: "sk", - }, - } - - r := gin.Default() - r.Use(func(c *gin.Context) { - c.Set("uidOrigin", "somelonguid@egi.eu") - c.Next() - }) - r.PUT("/system/services", MakeUpdateHandler(&cfg, back)) - - w := httptest.NewRecorder() - body := strings.NewReader(` - { - "name": "cowsay", - "cluster_id": "oscar", - "memory": "1Gi", - "cpu": "1.0", - "log_level": "CRITICAL", - "image": "ghcr.io/grycap/cowsay", - "alpine": false, - "script": "test", - "input": [ - { - "storage_provider": "minio", - "path": "/input" - } - ], - "output": [ - { - "storage_provider": "webdav.id", - "path": "/output" - } - ], - "storage_providers": { - "webdav": { - "id": { - "hostname": "` + server.URL + `", - "login": "user", - "password": "pass" - } - } - }, - "allowed_users": ["somelonguid1@egi.eu", "somelonguid2@egi.eu"] - } - `) - req, _ := http.NewRequest("PUT", "/system/services", body) - req.Header.Set("Authorization", "Bearer token") - r.ServeHTTP(w, req) - - // Close the fake MinIO server - defer server.Close() - - if w.Code != http.StatusNoContent { - fmt.Println(w.Body) - t.Errorf("expecting code %d, got %d", http.StatusNoContent, w.Code) - } - -} diff --git a/pkg/imagepuller/daemonset.go b/pkg/imagepuller/daemonset.go index 7d5a6f9f..037685ca 100644 --- a/pkg/imagepuller/daemonset.go +++ b/pkg/imagepuller/daemonset.go @@ -59,7 +59,7 @@ var stopper chan struct{} // Create daemonset func CreateDaemonset(cfg *types.Config, service types.Service, kubeClientset kubernetes.Interface) error { - DaemonSetLoggerInfo.Println("Creating daemonset for service:", service.Name) + //Set needed variables setWorkingNodes(kubeClientset) podGroup = generatePodGroupName() @@ -73,6 +73,8 @@ func CreateDaemonset(cfg *types.Config, service types.Service, kubeClientset kub if err != nil { DaemonSetLoggerInfo.Println(err) return fmt.Errorf("failed to create daemonset: %s", err.Error()) + } else { + DaemonSetLoggerInfo.Println("Created daemonset for service:", service.Name) } //Set watcher informer diff --git a/pkg/imagepuller/daemonset_test.go b/pkg/imagepuller/daemonset_test.go deleted file mode 100644 index 1b29e709..00000000 --- a/pkg/imagepuller/daemonset_test.go +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package imagepuller - -import ( - "testing" - - "bou.ke/monkey" - "github.com/grycap/oscar/v3/pkg/types" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/fake" -) - -func TestCreateDaemonset(t *testing.T) { - cfg := &types.Config{ - ServicesNamespace: "default", - } - service := types.Service{ - Name: "test-service", - Image: "test-image", - ImagePullSecrets: []string{"test-secret"}, - } - kubeClientset := fake.NewSimpleClientset() - - // Patch the watchPods function to return a mock result - monkey.Patch(watchPods, func(kubernetes.Interface, *types.Config) { - }) - - err := CreateDaemonset(cfg, service, kubeClientset) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - actions := kubeClientset.Actions() - if len(actions) != 2 { - t.Errorf("Expected 2 action but got %d", len(actions)) - } - if actions[0].GetVerb() != "list" || actions[0].GetResource().Resource != "nodes" { - t.Errorf("Expected create job action but got %v", actions[0]) - } - if actions[1].GetVerb() != "create" || actions[1].GetResource().Resource != "daemonsets" { - t.Errorf("Expected create job action but got %v", actions[1]) - } - - daemonset := getDaemonset(cfg, service) - - if daemonset.Name != "image-puller-test-service" { - t.Errorf("expected daemonset name to be 'image-puller-test-service', got %s", daemonset.Name) - } - - if daemonset.Namespace != cfg.ServicesNamespace { - t.Errorf("expected daemonset namespace to be '%s', got %s", cfg.ServicesNamespace, daemonset.Namespace) - } - - if daemonset.Spec.Template.Spec.Containers[0].Image != service.Image { - t.Errorf("expected container image to be '%s', got %s", service.Image, daemonset.Spec.Template.Spec.Containers[0].Image) - } - - defer monkey.Unpatch(watchPods) -} diff --git a/pkg/resourcemanager/delegate_test.go b/pkg/resourcemanager/delegate_test.go deleted file mode 100644 index 03ee2581..00000000 --- a/pkg/resourcemanager/delegate_test.go +++ /dev/null @@ -1,204 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package resourcemanager - -import ( - "bytes" - "encoding/json" - "log" - "net/http" - "net/http/httptest" - "testing" - - "github.com/grycap/oscar/v3/pkg/types" -) - -func TestDelegateJob(t *testing.T) { - logger := log.New(bytes.NewBuffer([]byte{}), "", log.LstdFlags) - event := "test-event" - - // Mock server to simulate the cluster endpoint - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method == http.MethodPost && r.URL.Path == "/" { - w.WriteHeader(http.StatusOK) - return - } - if r.Method == http.MethodPost && r.URL.Path == "/job/test-service" { - w.WriteHeader(http.StatusCreated) - return - } - if r.Method == http.MethodGet && r.URL.Path == "/system/services/test-service" { - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(&types.Service{Token: "test-token"}) - return - } - if r.Method == http.MethodGet && r.URL.Path == "/system/status" { - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(&GeneralInfo{ - CPUMaxFree: 1000, - CPUFreeTotal: 2000, - }) - return - } - w.WriteHeader(http.StatusNotFound) - })) - defer server.Close() - - service := &types.Service{ - Name: "test-service", - ClusterID: "test-cluster", - CPU: "1", - Delegation: "static", - Replicas: []types.Replica{ - { - Type: "oscar", - ClusterID: "test-cluster", - ServiceName: "test-service", - Priority: 50, - Headers: map[string]string{"Content-Type": "application/json"}, - }, - }, - Clusters: map[string]types.Cluster{ - "test-cluster": { - Endpoint: server.URL, - AuthUser: "user", - AuthPassword: "password", - SSLVerify: false, - }, - }, - } - - t.Run("Replica type oscar", func(t *testing.T) { - err := DelegateJob(service, event, logger) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - }) - - t.Run("Replica type oscar with delegation random", func(t *testing.T) { - service.Delegation = "random" - err := DelegateJob(service, event, logger) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - }) - - t.Run("Replica type oscar with delegation load-based", func(t *testing.T) { - service.Delegation = "load-based" - err := DelegateJob(service, event, logger) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - }) - - t.Run("Replica type endpoint", func(t *testing.T) { - service.Replicas[0].Type = "endpoint" - service.Replicas[0].URL = server.URL - err := DelegateJob(service, event, logger) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - }) -} - -func TestWrapEvent(t *testing.T) { - providerID := "test-provider" - event := "test-event" - - expected := DelegatedEvent{ - StorageProviderID: providerID, - Event: event, - } - - result := WrapEvent(providerID, event) - - if result != expected { - t.Errorf("Expected %v, got %v", expected, result) - } -} - -func TestGetServiceToken(t *testing.T) { - replica := types.Replica{ - ServiceName: "test-service", - } - cluster := types.Cluster{ - Endpoint: "http://localhost:8080", - AuthUser: "user", - AuthPassword: "password", - SSLVerify: false, - } - - // Mock server to simulate the cluster endpoint - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method == http.MethodGet && r.URL.Path == "/system/services/test-service" { - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(&types.Service{Token: "test-token"}) - return - } - w.WriteHeader(http.StatusNotFound) - })) - defer server.Close() - - // Update the cluster endpoint to the mock server URL - cluster.Endpoint = server.URL - - token, err := getServiceToken(replica, cluster) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - expectedToken := "test-token" - if token != expectedToken { - t.Errorf("Expected %v, got %v", expectedToken, token) - } -} - -func TestUpdateServiceToken(t *testing.T) { - replica := types.Replica{ - ServiceName: "test-service", - } - cluster := types.Cluster{ - Endpoint: "http://localhost:8080", - AuthUser: "user", - AuthPassword: "password", - SSLVerify: false, - } - - // Mock server to simulate the cluster endpoint - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method == http.MethodGet && r.URL.Path == "/system/services/test-service" { - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(&types.Service{Token: "test-token"}) - return - } - w.WriteHeader(http.StatusNotFound) - })) - defer server.Close() - - // Update the cluster endpoint to the mock server URL - cluster.Endpoint = server.URL - - token, err := updateServiceToken(replica, cluster) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - expectedToken := "test-token" - if token != expectedToken { - t.Errorf("Expected %v, got %v", expectedToken, token) - } -} diff --git a/pkg/resourcemanager/rescheduler_test.go b/pkg/resourcemanager/rescheduler_test.go deleted file mode 100644 index 6f3939b7..00000000 --- a/pkg/resourcemanager/rescheduler_test.go +++ /dev/null @@ -1,193 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package resourcemanager - -import ( - "bytes" - "log" - "testing" - "time" - - "bou.ke/monkey" - "github.com/grycap/oscar/v3/pkg/backends" - "github.com/grycap/oscar/v3/pkg/types" - jobv1 "k8s.io/api/batch/v1" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes/fake" -) - -func TestGetReSchedulablePods(t *testing.T) { - // Define test namespace - namespace := "test-namespace" - - // Create test pods - pods := &v1.PodList{ - Items: []v1.Pod{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Namespace: namespace, - Labels: map[string]string{ - types.ServiceLabel: "service1", - types.ReSchedulerLabelKey: "10", - }, - CreationTimestamp: metav1.Time{Time: time.Now().Add(-15 * time.Second)}, - }, - Status: v1.PodStatus{ - Phase: v1.PodPending, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "pod2", - Namespace: namespace, - Labels: map[string]string{ - types.ServiceLabel: "service2", - types.ReSchedulerLabelKey: "20", - }, - CreationTimestamp: metav1.Time{Time: time.Now().Add(-5 * time.Second)}, - }, - Status: v1.PodStatus{ - Phase: v1.PodPending, - }, - }, - }, - } - - // Create a fake Kubernetes client - kubeClientset := fake.NewSimpleClientset(pods) - - // Call the function to test - reSchedulablePods, err := getReSchedulablePods(kubeClientset, namespace) - if err != nil { - t.Fatalf("error getting reschedulable pods: %v", err) - } - - // Check the results - if len(reSchedulablePods) != 1 { - t.Errorf("expected 1 reschedulable pod, got %d", len(reSchedulablePods)) - } - - if reSchedulablePods[0].Name != "pod1" { - t.Errorf("expected pod1 to be reschedulable, got %s", reSchedulablePods[0].Name) - } -} - -func TestGetReScheduleInfos(t *testing.T) { - // Define test namespace - namespace := "test-namespace" - - // Create test pods - pods := []v1.Pod{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Namespace: namespace, - Labels: map[string]string{ - types.ServiceLabel: "service1", - types.ReSchedulerLabelKey: "10", - }, - CreationTimestamp: metav1.Time{Time: time.Now().Add(-15 * time.Second)}, - }, - Status: v1.PodStatus{ - Phase: v1.PodPending, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "pod2", - Namespace: namespace, - Labels: map[string]string{ - types.ServiceLabel: "service2", - types.ReSchedulerLabelKey: "20", - }, - CreationTimestamp: metav1.Time{Time: time.Now().Add(-5 * time.Second)}, - }, - Status: v1.PodStatus{ - Phase: v1.PodPending, - }, - }, - } - - back := backends.MakeFakeBackend() - // Call the function to test - reScheduleInfos := getReScheduleInfos(pods, back) - if reScheduleInfos == nil { - t.Fatalf("error getting reschedule infos") - } - -} - -func TestStartReScheduler(t *testing.T) { - // Define test namespace - namespace := "test-namespace" - - // Create test pods - pods := &v1.PodList{ - Items: []v1.Pod{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Namespace: namespace, - Labels: map[string]string{ - types.ServiceLabel: "service1", - types.ReSchedulerLabelKey: "10", - "job-name": "job1", - }, - CreationTimestamp: metav1.Time{Time: time.Now().Add(-15 * time.Second)}, - }, - Status: v1.PodStatus{ - Phase: v1.PodPending, - }, - }, - }, - } - jobs := &jobv1.JobList{ - Items: []jobv1.Job{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "job1", - Namespace: namespace, - }, - }, - }, - } - - // Create a fake Kubernetes client - kubeClientset := fake.NewSimpleClientset(pods, jobs) - back := backends.MakeFakeBackend() - cfg := &types.Config{ - ReSchedulerInterval: 5, - ServicesNamespace: namespace, - } - - // Mock the Delegate function using monkey patching - monkey.Patch(DelegateJob, func(service *types.Service, event string, logger *log.Logger) error { - return nil - }) - var buf bytes.Buffer - reSchedulerLogger = log.New(&buf, "[RE-SCHEDULER] ", log.Flags()) - // Call the function to test - go StartReScheduler(cfg, back, kubeClientset) - time.Sleep(2 * time.Second) - - defer monkey.Unpatch(DelegateJob) - if buf.String() != "" { - t.Fatalf("error starting rescheduler: %v", buf.String()) - } -} diff --git a/pkg/types/config.go b/pkg/types/config.go index 6ad0a3a9..3777791e 100644 --- a/pkg/types/config.go +++ b/pkg/types/config.go @@ -183,13 +183,13 @@ type Config struct { // OIDCGroups OpenID comma-separated group list to grant access in the cluster. // Groups defined in the "eduperson_entitlement" OIDC scope, // as described here: https://docs.egi.eu/providers/check-in/sp/#10-groups - OIDCGroups []string `json:"oidc_groups"` + OIDCGroups []string `json:"-"` // IngressHost string `json:"-"` // Github path of FaaS Supervisor (needed for Interlink config) - SupervisorKitImage string `json:"-"` + SupervisorURL string `json:"-"` //Path to additional OSCAR configuration setted by users AdditionalConfigPath string `json:"-"` @@ -238,7 +238,7 @@ var configVars = []configVar{ {"OIDCSubject", "OIDC_SUBJECT", false, stringType, ""}, {"OIDCGroups", "OIDC_GROUPS", false, stringSliceType, ""}, {"IngressHost", "INGRESS_HOST", false, stringType, ""}, - {"SupervisorKitImage", "SUPERVISOR_KIT_IMAGE", false, stringType, ""}, + {"SupervisorURL", "SUPERVISOR_URL", false, stringType, "https://github.com/grycap/faas-supervisor/releases/download/1.5.8/supervisor"}, {"AdditionalConfigPath", "ADDITIONAL_CONFIG_PATH", false, stringType, "config.yaml"}, } diff --git a/pkg/types/expose.go b/pkg/types/expose.go index 09b758b4..0be38895 100644 --- a/pkg/types/expose.go +++ b/pkg/types/expose.go @@ -152,8 +152,8 @@ func UpdateExpose(service Service, kubeClientset kubernetes.Interface, cfg *Conf // TODO check and refactor // Main function that list all the kubernetes components -// This function is not used, in the future could be useful -func ListExpose(kubeClientset kubernetes.Interface, cfg *Config) error { +// This function is not used, in the future could be usefull +func ListExpose(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { deploy, hpa, err := listDeployments(kubeClientset, cfg) services, err2 := listServices(kubeClientset, cfg) @@ -246,7 +246,7 @@ func getHortizontalAutoScaleSpec(service Service, cfg *Config) *autos.Horizontal func getPodTemplateSpec(service Service, cfg *Config) v1.PodTemplateSpec { podSpec, _ := service.ToPodSpec(cfg) - for i := range podSpec.Containers { + for i, _ := range podSpec.Containers { podSpec.Containers[i].Ports = []v1.ContainerPort{ { Name: podPortName, @@ -414,7 +414,7 @@ func deleteService(name string, kubeClientset kubernetes.Interface, cfg *Config) func createIngress(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { // Create Secret - ingress := getIngressSpec(service, cfg) + ingress := getIngressSpec(service, kubeClientset, cfg) _, err := kubeClientset.NetworkingV1().Ingresses(cfg.ServicesNamespace).Create(context.TODO(), ingress, metav1.CreateOptions{}) if err != nil { return err @@ -432,7 +432,7 @@ func updateIngress(service Service, kubeClientset kubernetes.Interface, cfg *Con //if exist continue and need -> Update //if exist and not need -> delete //if not exist create - kube_ingress := getIngressSpec(service, cfg) + kube_ingress := getIngressSpec(service, kubeClientset, cfg) _, err := kubeClientset.NetworkingV1().Ingresses(cfg.ServicesNamespace).Update(context.TODO(), kube_ingress, metav1.UpdateOptions{}) if err != nil { return err @@ -455,7 +455,7 @@ func updateIngress(service Service, kubeClientset kubernetes.Interface, cfg *Con } // Return a kubernetes ingress component, ready to deploy or update -func getIngressSpec(service Service, cfg *Config) *net.Ingress { +func getIngressSpec(service Service, kubeClientset kubernetes.Interface, cfg *Config) *net.Ingress { name_ingress := getIngressName(service.Name) pathofapi := getAPIPath(service.Name) name_service := getServiceName(service.Name) @@ -554,7 +554,7 @@ func deleteIngress(name string, kubeClientset kubernetes.Interface, cfg *Config) // Secret func createSecret(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { - secret := getSecretSpec(service, cfg) + secret := getSecretSpec(service, kubeClientset, cfg) _, err := kubeClientset.CoreV1().Secrets(cfg.ServicesNamespace).Create(context.TODO(), secret, metav1.CreateOptions{}) if err != nil { return err @@ -563,7 +563,7 @@ func createSecret(service Service, kubeClientset kubernetes.Interface, cfg *Conf } func updateSecret(service Service, kubeClientset kubernetes.Interface, cfg *Config) error { - secret := getSecretSpec(service, cfg) + secret := getSecretSpec(service, kubeClientset, cfg) _, err := kubeClientset.CoreV1().Secrets(cfg.ServicesNamespace).Update(context.TODO(), secret, metav1.UpdateOptions{}) if err != nil { return err @@ -579,12 +579,12 @@ func deleteSecret(name string, kubeClientset kubernetes.Interface, cfg *Config) } return nil } -func getSecretSpec(service Service, cfg *Config) *v1.Secret { +func getSecretSpec(service Service, kubeClientset kubernetes.Interface, cfg *Config) *v1.Secret { //setPassword hash := make(htpasswd.HashedPasswords) err := hash.SetPassword(service.Name, service.Token, htpasswd.HashAPR1) if err != nil { - ExposeLogger.Print(err.Error()) + ExposeLogger.Printf(err.Error()) } //Create Secret inmutable := false @@ -620,7 +620,10 @@ func existsSecret(serviceName string, kubeClientset kubernetes.Interface, cfg *C func existsIngress(serviceName string, namespace string, kubeClientset kubernetes.Interface) bool { _, err := kubeClientset.NetworkingV1().Ingresses(namespace).Get(context.TODO(), getIngressName(serviceName), metav1.GetOptions{}) - return err == nil + if err == nil { + return true + } + return false } /// These are auxiliary functions diff --git a/pkg/types/expose_test.go b/pkg/types/expose_test.go deleted file mode 100644 index 69bab5b3..00000000 --- a/pkg/types/expose_test.go +++ /dev/null @@ -1,371 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package types - -import ( - "testing" - - appsv1 "k8s.io/api/apps/v1" - autoscalingv1 "k8s.io/api/autoscaling/v1" - corev1 "k8s.io/api/core/v1" - netv1 "k8s.io/api/networking/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - testclient "k8s.io/client-go/kubernetes/fake" - k8stesting "k8s.io/client-go/testing" -) - -type Action struct { - Verb string - Resource string -} - -func CompareActions(actions []k8stesting.Action, expected_actions []Action) bool { - if len(actions) != len(expected_actions) { - return false - } - - for i, action := range actions { - if action.GetVerb() != expected_actions[i].Verb || action.GetResource().Resource != expected_actions[i].Resource { - return false - } - } - return true -} - -func TestCreateExpose(t *testing.T) { - - kubeClientset := testclient.NewSimpleClientset() - - service := Service{ - Name: "test-service", - Expose: Expose{ - MinScale: 1, - MaxScale: 3, - CpuThreshold: 80, - SetAuth: true, - }, - } - cfg := &Config{ServicesNamespace: "namespace"} - - err := CreateExpose(service, kubeClientset, cfg) - - if err != nil { - t.Errorf("Error creating expose: %v", err) - } - - actions := kubeClientset.Actions() - expected_actions := []Action{ - {Verb: "create", Resource: "deployments"}, - {Verb: "create", Resource: "horizontalpodautoscalers"}, - {Verb: "create", Resource: "services"}, - {Verb: "create", Resource: "ingresses"}, - {Verb: "create", Resource: "secrets"}, - } - - if CompareActions(actions, expected_actions) == false { - t.Errorf("Expected %v actions but got %v", expected_actions, actions) - } -} - -func TestDeleteExpose(t *testing.T) { - - K8sObjects := []runtime.Object{ - &autoscalingv1.HorizontalPodAutoscaler{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-hpa", - Namespace: "namespace", - }, - }, - &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-dlp", - Namespace: "namespace", - }, - }, - &corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-svc", - Namespace: "namespace", - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - err := DeleteExpose("service", kubeClientset, cfg) - - if err != nil { - t.Errorf("Error creating expose: %v", err) - } - - actions := kubeClientset.Actions() - - expected_actions := []Action{ - {Verb: "delete", Resource: "horizontalpodautoscalers"}, - {Verb: "delete", Resource: "deployments"}, - {Verb: "delete", Resource: "services"}, - {Verb: "get", Resource: "ingresses"}, - {Verb: "delete-collection", Resource: "pods"}, - } - - if CompareActions(actions, expected_actions) == false { - t.Errorf("Expected %v actions but got %v", expected_actions, actions) - } -} - -func TestUpdateExpose(t *testing.T) { - - K8sObjects := []runtime.Object{ - &autoscalingv1.HorizontalPodAutoscaler{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-hpa", - Namespace: "namespace", - }, - }, - &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-dlp", - Namespace: "namespace", - }, - }, - &corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-svc", - Namespace: "namespace", - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - service := Service{ - Name: "service", - Expose: Expose{ - MinScale: 1, - MaxScale: 3, - CpuThreshold: 80, - SetAuth: true, - }, - } - - err := UpdateExpose(service, kubeClientset, cfg) - - if err != nil { - t.Errorf("Error creating expose: %v", err) - } - - actions := kubeClientset.Actions() - - expected_actions := []Action{ - {Verb: "get", Resource: "deployments"}, - {Verb: "update", Resource: "deployments"}, - {Verb: "get", Resource: "horizontalpodautoscalers"}, - {Verb: "update", Resource: "horizontalpodautoscalers"}, - {Verb: "update", Resource: "services"}, - {Verb: "get", Resource: "ingresses"}, - {Verb: "create", Resource: "ingresses"}, - {Verb: "create", Resource: "secrets"}, - } - - if CompareActions(actions, expected_actions) == false { - t.Errorf("Expected %v actions but got %v", expected_actions, actions) - } -} - -func TestServiceSpec(t *testing.T) { - - service := Service{ - Name: "test-service", - Expose: Expose{ - MinScale: 1, - MaxScale: 3, - CpuThreshold: 40, - APIPort: 8080, - SetAuth: true, - }, - } - cfg := &Config{Namespace: "namespace"} - res := getServiceSpec(service, cfg) - if res.Spec.Ports[0].TargetPort.IntVal != 8080 { - t.Errorf("Expected port 8080 but got %d", res.Spec.Ports[0].Port) - } -} - -func TestHortizontalAutoScaleSpec(t *testing.T) { - - service := Service{ - Name: "test-service", - Expose: Expose{ - MinScale: 1, - MaxScale: 3, - CpuThreshold: 40, - }, - } - cfg := &Config{Namespace: "namespace"} - res := getHortizontalAutoScaleSpec(service, cfg) - if *res.Spec.MinReplicas != 1 { - t.Errorf("Expected min replicas 1 but got %d", res.Spec.MinReplicas) - } - if res.Spec.MaxReplicas != 3 { - t.Errorf("Expected max replicas 3 but got %d", res.Spec.MaxReplicas) - } - if *res.Spec.TargetCPUUtilizationPercentage != 40 { - t.Errorf("Expected target cpu 40 but got %d", res.Spec.TargetCPUUtilizationPercentage) - } -} - -func TestListIngress(t *testing.T) { - - K8sObjects := []runtime.Object{ - &netv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-ing", - Namespace: "namespace", - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - _, err := listIngress(kubeClientset, cfg) - - if err != nil { - t.Errorf("Error listing ingresses: %v", err) - } -} - -func TestUpdateIngress(t *testing.T) { - - K8sObjects := []runtime.Object{ - &netv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-ing", - Namespace: "namespace", - }, - }, - } - - service := Service{ - Name: "service", - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - err := updateIngress(service, kubeClientset, cfg) - - if err != nil { - t.Errorf("Error updating ingress: %v", err) - } -} - -func TestDeleteIngress(t *testing.T) { - - K8sObjects := []runtime.Object{ - &netv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-ing", - Namespace: "namespace", - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - err := deleteIngress("service-ing", kubeClientset, cfg) - - if err != nil { - t.Errorf("Error deleting ingress: %v", err) - } -} - -func TestUpdateSecret(t *testing.T) { - - K8sObjects := []runtime.Object{ - &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-auth-expose", - Namespace: "namespace", - }, - }, - } - service := Service{ - Name: "service", - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - err := updateSecret(service, kubeClientset, cfg) - - if err != nil { - t.Errorf("Error updating secret: %v", err) - } -} - -func TestDeleteSecret(t *testing.T) { - - K8sObjects := []runtime.Object{ - &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-auth-expose", - Namespace: "namespace", - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - err := deleteSecret("service", kubeClientset, cfg) - - if err != nil { - t.Errorf("Error deleting secret: %v", err) - } -} - -func TestExistsSecret(t *testing.T) { - - K8sObjects := []runtime.Object{ - &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "service-auth-expose", - Namespace: "namespace", - }, - }, - } - - kubeClientset := testclient.NewSimpleClientset(K8sObjects...) - cfg := &Config{ServicesNamespace: "namespace"} - - exists := existsSecret("service", kubeClientset, cfg) - - if exists != true { - t.Errorf("Expected secret to exist but got %v", exists) - } - - notexists := existsSecret("service1", kubeClientset, cfg) - - if notexists != false { - t.Errorf("Expected secret not to exist but got %v", notexists) - } -} diff --git a/pkg/types/interlink.go b/pkg/types/interlink.go deleted file mode 100644 index e80cbbea..00000000 --- a/pkg/types/interlink.go +++ /dev/null @@ -1,101 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package types - -import ( - "encoding/base64" - - v1 "k8s.io/api/core/v1" -) - -const ( - ContainerSupervisorName = "supervisor-container" - SupervisorMountPath = "/data" - SupervisorArg = "cp -r /supervisor/* " + SupervisorMountPath - NameSupervisorVolume = "supervisor-share-data" - NodeSelectorKey = "kubernetes.io/hostname" - - // Annotations for InterLink nodes - InterLinkDNSPolicy = "ClusterFirst" - InterLinkRestartPolicy = "OnFailure" - InterLinkTolerationKey = "virtual-node.interlink/no-schedule" - InterLinkTolerationOperator = "Exists" -) - -var SupervisorCommand = []string{"/bin/sh", "-c"} -var OscarContainerCommand = []string{"echo $EVENT | base64 -d | " + SupervisorMountPath + "/supervisor"} - -// SetInterlinkJob Return interlink configuration for kubernetes job and add Interlink variables to podSpec -func SetInterlinkJob(podSpec *v1.PodSpec, service *Service, cfg *Config, eventBytes []byte) ([]string, v1.EnvVar, []string) { - command := SupervisorCommand - event := v1.EnvVar{ - Name: EventVariable, - Value: base64.StdEncoding.EncodeToString([]byte(eventBytes)), - } - args := OscarContainerCommand - podSpec.NodeSelector = map[string]string{ - NodeSelectorKey: service.InterLinkNodeName, - } - podSpec.DNSPolicy = InterLinkDNSPolicy - podSpec.RestartPolicy = InterLinkRestartPolicy - podSpec.Tolerations = []v1.Toleration{ - { - Key: InterLinkTolerationKey, - Operator: InterLinkTolerationOperator, - }, - } - - addInitContainer(podSpec, cfg) - return command, event, args -} - -// SetInterlinkService Add InterLink configuration to podSpec -func SetInterlinkService(podSpec *v1.PodSpec) { - podSpec.Containers[0].ImagePullPolicy = "Always" - shareDataVolumeMount := v1.VolumeMount{ - Name: NameSupervisorVolume, - MountPath: SupervisorMountPath, - } - - podSpec.Containers[0].VolumeMounts = append(podSpec.Containers[0].VolumeMounts, shareDataVolumeMount) - - shareDataVolume := v1.Volume{ - Name: NameSupervisorVolume, - VolumeSource: v1.VolumeSource{ - EmptyDir: &v1.EmptyDirVolumeSource{}, - }, - } - podSpec.Volumes = append(podSpec.Volumes, shareDataVolume) - -} - -func addInitContainer(podSpec *v1.PodSpec, cfg *Config) { - initContainer := v1.Container{ - Name: ContainerSupervisorName, - Command: SupervisorCommand, - Args: []string{SupervisorArg}, - Image: cfg.SupervisorKitImage, - ImagePullPolicy: v1.PullIfNotPresent, - VolumeMounts: []v1.VolumeMount{ - { - Name: NameSupervisorVolume, - MountPath: SupervisorMountPath, - }, - }, - } - podSpec.InitContainers = []v1.Container{initContainer} -} diff --git a/pkg/types/interlink_test.go b/pkg/types/interlink_test.go deleted file mode 100644 index 3b15f8ba..00000000 --- a/pkg/types/interlink_test.go +++ /dev/null @@ -1,120 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package types - -import ( - "encoding/base64" - "testing" - - v1 "k8s.io/api/core/v1" -) - -func TestSetInterlinkJob(t *testing.T) { - podSpec := &v1.PodSpec{} - service := &Service{InterLinkNodeName: "test-node"} - cfg := &Config{SupervisorKitImage: "test-image"} - eventBytes := []byte("test-event") - - command, event, args := SetInterlinkJob(podSpec, service, cfg, eventBytes) - - if len(command) != 2 || command[0] != "/bin/sh" || command[1] != "-c" { - t.Errorf("Unexpected command: %v", command) - } - - expectedEventValue := base64.StdEncoding.EncodeToString(eventBytes) - if event.Name != EventVariable || event.Value != expectedEventValue { - t.Errorf("Unexpected event: %v", event) - } - - expectedArgs := "echo $EVENT | base64 -d | " + SupervisorMountPath + "/supervisor" - if len(args) != 1 || args[0] != expectedArgs { - t.Errorf("Unexpected args: %v", args) - } - - if podSpec.NodeSelector[NodeSelectorKey] != service.InterLinkNodeName { - t.Errorf("Unexpected NodeSelector: %v", podSpec.NodeSelector) - } - - if podSpec.DNSPolicy != InterLinkDNSPolicy { - t.Errorf("Unexpected DNSPolicy: %v", podSpec.DNSPolicy) - } - - if podSpec.RestartPolicy != InterLinkRestartPolicy { - t.Errorf("Unexpected RestartPolicy: %v", podSpec.RestartPolicy) - } - - if len(podSpec.Tolerations) != 1 || podSpec.Tolerations[0].Key != InterLinkTolerationKey || podSpec.Tolerations[0].Operator != InterLinkTolerationOperator { - t.Errorf("Unexpected Tolerations: %v", podSpec.Tolerations) - } -} - -func TestSetInterlinkService(t *testing.T) { - podSpec := &v1.PodSpec{ - Containers: []v1.Container{ - {}, - }, - } - - SetInterlinkService(podSpec) - - if podSpec.Containers[0].ImagePullPolicy != "Always" { - t.Errorf("Unexpected ImagePullPolicy: %v", podSpec.Containers[0].ImagePullPolicy) - } - - if len(podSpec.Containers[0].VolumeMounts) != 1 || podSpec.Containers[0].VolumeMounts[0].Name != NameSupervisorVolume || podSpec.Containers[0].VolumeMounts[0].MountPath != SupervisorMountPath { - t.Errorf("Unexpected VolumeMounts: %v", podSpec.Containers[0].VolumeMounts) - } - - if len(podSpec.Volumes) != 1 || podSpec.Volumes[0].Name != NameSupervisorVolume || podSpec.Volumes[0].VolumeSource.EmptyDir == nil { - t.Errorf("Unexpected Volumes: %v", podSpec.Volumes) - } -} - -func TestAddInitContainer(t *testing.T) { - podSpec := &v1.PodSpec{} - cfg := &Config{SupervisorKitImage: "test-image"} - - addInitContainer(podSpec, cfg) - - if len(podSpec.InitContainers) != 1 { - t.Fatalf("Expected 1 init container, got %d", len(podSpec.InitContainers)) - } - - initContainer := podSpec.InitContainers[0] - if initContainer.Name != ContainerSupervisorName { - t.Errorf("Unexpected init container name: %v", initContainer.Name) - } - - if len(initContainer.Command) != 2 || initContainer.Command[0] != "/bin/sh" || initContainer.Command[1] != "-c" { - t.Errorf("Unexpected init container command: %v", initContainer.Command) - } - - if len(initContainer.Args) != 1 || initContainer.Args[0] != SupervisorArg { - t.Errorf("Unexpected init container args: %v", initContainer.Args) - } - - if initContainer.Image != cfg.SupervisorKitImage { - t.Errorf("Unexpected init container image: %v", initContainer.Image) - } - - if initContainer.ImagePullPolicy != v1.PullIfNotPresent { - t.Errorf("Unexpected init container image pull policy: %v", initContainer.ImagePullPolicy) - } - - if len(initContainer.VolumeMounts) != 1 || initContainer.VolumeMounts[0].Name != NameSupervisorVolume || initContainer.VolumeMounts[0].MountPath != SupervisorMountPath { - t.Errorf("Unexpected init container volume mounts: %v", initContainer.VolumeMounts) - } -} diff --git a/pkg/types/mount.go b/pkg/types/mount.go index 71915fe2..4c2e5621 100644 --- a/pkg/types/mount.go +++ b/pkg/types/mount.go @@ -49,6 +49,8 @@ done` // SetMount Creates the sidecar container that mounts the source volume onto the pod volume func SetMount(podSpec *v1.PodSpec, service Service, cfg *Config) { podSpec.Containers = append(podSpec.Containers, sidecarPodSpec(service)) + termination := int64(5) + podSpec.TerminationGracePeriodSeconds = &termination addVolume(podSpec) } diff --git a/pkg/types/mount_test.go b/pkg/types/mount_test.go deleted file mode 100644 index df7a3945..00000000 --- a/pkg/types/mount_test.go +++ /dev/null @@ -1,157 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package types - -import ( - "testing" - - v1 "k8s.io/api/core/v1" -) - -func TestSetMount(t *testing.T) { - podSpec := &v1.PodSpec{} - service := Service{ - Mount: StorageIOConfig{ - Provider: "minio.provider", - Path: "test-bucket", - }, - StorageProviders: &StorageProviders{ - MinIO: map[string]*MinIOProvider{ - "provider": { - AccessKey: "test-access-key", - SecretKey: "test-secret-key", - Endpoint: "test-endpoint", - }, - }, - }, - } - cfg := &Config{} - - SetMount(podSpec, service, cfg) - - if len(podSpec.Containers) != 1 { - t.Fatalf("expected 1 container, got %d", len(podSpec.Containers)) - } - - container := podSpec.Containers[0] - if container.Name != rcloneContainerName { - t.Errorf("expected container name %s, got %s", rcloneContainerName, container.Name) - } - - if container.Image != rcloneContainerImage { - t.Errorf("expected container image %s, got %s", rcloneContainerImage, container.Image) - } - - expectedEnvVars := map[string]string{ - "MNT_POINT": rcloneFolderMount, - "MINIO_BUCKET": "test-bucket", - "AWS_ACCESS_KEY_ID": "test-access-key", - "AWS_SECRET_ACCESS_KEY": "test-secret-key", - "MINIO_ENDPOINT": "test-endpoint", - } - - for _, envVar := range container.Env { - if expectedValue, ok := expectedEnvVars[envVar.Name]; ok { - if envVar.Value != expectedValue { - t.Errorf("expected env var %s to have value %s, got %s", envVar.Name, expectedValue, envVar.Value) - } - } else { - t.Errorf("unexpected env var %s", envVar.Name) - } - } - - if len(container.VolumeMounts) != 4 { - t.Fatalf("expected 4 volume mounts, got %d", len(container.VolumeMounts)) - } - - if len(podSpec.Volumes) != 2 { - t.Fatalf("expected 2 volumes, got %d", len(podSpec.Volumes)) - } -} - -func TestSetMinIOEnvVars(t *testing.T) { - service := Service{ - Mount: StorageIOConfig{ - Path: "test-bucket", - }, - StorageProviders: &StorageProviders{ - MinIO: map[string]*MinIOProvider{ - "provider": { - AccessKey: "test-access-key", - SecretKey: "test-secret-key", - Endpoint: "test-endpoint", - }, - }, - }, - } - providerId := "provider" - - envVars := setMinIOEnvVars(service, providerId) - - expectedEnvVars := map[string]string{ - "MINIO_BUCKET": "test-bucket", - "AWS_ACCESS_KEY_ID": "test-access-key", - "AWS_SECRET_ACCESS_KEY": "test-secret-key", - "MINIO_ENDPOINT": "test-endpoint", - } - - for _, envVar := range envVars { - if expectedValue, ok := expectedEnvVars[envVar.Name]; ok { - if envVar.Value != expectedValue { - t.Errorf("expected env var %s to have value %s, got %s", envVar.Name, expectedValue, envVar.Value) - } - } else { - t.Errorf("unexpected env var %s", envVar.Name) - } - } -} - -func TestSetWebDavEnvVars(t *testing.T) { - service := Service{ - Mount: StorageIOConfig{ - Path: "test-folder", - }, - StorageProviders: &StorageProviders{ - WebDav: map[string]*WebDavProvider{ - "provider": { - Login: "test-login", - Password: "test-password", - Hostname: "test-hostname", - }, - }, - }, - } - providerId := "provider" - - envVars := setWebDavEnvVars(service, providerId) - - expectedEnvVars := map[string]string{ - "WEBDAV_FOLDER": "test-folder", - "WEBDAV_LOGIN": "test-login", - "WEBDAV_PASSWORD": "test-password", - "WEBDAV_HOSTNAME": "https://test-hostname", - } - - for _, envVar := range envVars { - if expectedValue, ok := expectedEnvVars[envVar.Name]; ok { - if envVar.Value != expectedValue { - t.Errorf("expected env var %s to have value %s, got %s", envVar.Name, expectedValue, envVar.Value) - } - } else { - t.Errorf("unexpected env var %s", envVar.Name) - } - } -} diff --git a/pkg/types/replica_test.go b/pkg/types/replica_test.go deleted file mode 100644 index efa5d896..00000000 --- a/pkg/types/replica_test.go +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package types - -import ( - "sort" - "testing" -) - -func TestReplicaList_Len(t *testing.T) { - replicas := ReplicaList{ - {Type: "oscar", Priority: 1}, - {Type: "endpoint", Priority: 2}, - } - expected := 2 - if replicas.Len() != expected { - t.Errorf("expected %d, got %d", expected, len(replicas)) - } -} - -func TestReplicaList_Swap(t *testing.T) { - replicas := ReplicaList{ - {Type: "oscar", Priority: 1}, - {Type: "endpoint", Priority: 2}, - } - replicas.Swap(0, 1) - if replicas[0].Priority != 2 || replicas[1].Priority != 1 { - t.Errorf("Swap did not work as expected") - } -} - -func TestReplicaList_Less(t *testing.T) { - replicas := ReplicaList{ - {Type: "oscar", Priority: 1}, - {Type: "endpoint", Priority: 2}, - } - if !replicas.Less(0, 1) { - t.Errorf("expected replicas[0] to be less than replicas[1]") - } - if replicas.Less(1, 0) { - t.Errorf("expected replicas[1] to not be less than replicas[0]") - } -} - -func TestReplicaList_Sort(t *testing.T) { - replicas := ReplicaList{ - {Type: "endpoint", Priority: 2}, - {Type: "oscar", Priority: 1}, - {Type: "oscar", Priority: 0}, - } - sort.Sort(replicas) - if replicas[0].Priority != 0 || replicas[1].Priority != 1 || replicas[2].Priority != 2 { - t.Errorf("Sort did not work as expected") - } -} diff --git a/pkg/types/service.go b/pkg/types/service.go index 20098ab3..9645b41e 100644 --- a/pkg/types/service.go +++ b/pkg/types/service.go @@ -108,17 +108,6 @@ const ( // YAMLMarshal package-level yaml marshal function var YAMLMarshal = yaml.Marshal -type Expose struct { - MinScale int32 `json:"min_scale" default:"1"` - MaxScale int32 `json:"max_scale" default:"10"` - APIPort int `json:"api_port,omitempty" ` - CpuThreshold int32 `json:"cpu_threshold" default:"80" ` - RewriteTarget bool `json:"rewrite_target" default:"false" ` - NodePort int32 `json:"nodePort" default:"0" ` - DefaultCommand bool `json:"default_command" ` - SetAuth bool `json:"set_auth" ` -} - // Service represents an OSCAR service following the SCAR Function Definition Language type Service struct { // Name the name of the service @@ -224,7 +213,16 @@ type Service struct { // Optional ImagePullSecrets []string `json:"image_pull_secrets,omitempty"` - Expose Expose `json:"expose"` + Expose struct { + MinScale int32 `json:"min_scale" default:"1"` + MaxScale int32 `json:"max_scale" default:"10"` + APIPort int `json:"api_port,omitempty" ` + CpuThreshold int32 `json:"cpu_threshold" default:"80" ` + RewriteTarget bool `json:"rewrite_target" default:"false" ` + NodePort int32 `json:"nodePort" default:"0" ` + DefaultCommand bool `json:"default_command" ` + SetAuth bool `json:"set_auth" ` + } `json:"expose"` // The user-defined environment variables assigned to the service // Optional @@ -260,7 +258,7 @@ type Service struct { InterLinkNodeName string `json:"interlink_node_name"` // List of EGI UID's identifying the users that will have visibility of the service and its MinIO storage provider - // Optional (If the list is empty we assume the visibility is public for all cluster users) + // Optional (If the list is empty we asume the visibility is public for all cluster users) AllowedUsers []string `json:"allowed_users"` // Configuration to create a storage provider as a volume inside the service container @@ -309,7 +307,7 @@ func (service *Service) ToPodSpec(cfg *Config) (*v1.PodSpec, error) { } if cfg.InterLinkAvailable && service.InterLinkNodeName != "" { // Add specs of InterLink - SetInterlinkService(podSpec) + podSpec.Containers[0].ImagePullPolicy = "Always" } else { // Add specs volumeMount := v1.VolumeMount{ diff --git a/pkg/utils/auth/auth.go b/pkg/utils/auth/auth.go index 57795a48..40883f7c 100644 --- a/pkg/utils/auth/auth.go +++ b/pkg/utils/auth/auth.go @@ -18,9 +18,7 @@ package auth import ( "fmt" - "log" "strings" - "time" "github.com/gin-gonic/gin" "github.com/grycap/oscar/v3/pkg/types" @@ -29,7 +27,7 @@ import ( ) // GetAuthMiddleware returns the appropriate gin auth middleware -func GetAuthMiddleware(cfg *types.Config, kubeClientset kubernetes.Interface) gin.HandlerFunc { +func GetAuthMiddleware(cfg *types.Config, kubeClientset *kubernetes.Clientset) gin.HandlerFunc { if !cfg.OIDCEnable { return gin.BasicAuth(gin.Accounts{ // Use the config's username and password for basic auth @@ -40,7 +38,7 @@ func GetAuthMiddleware(cfg *types.Config, kubeClientset kubernetes.Interface) gi } // CustomAuth returns a custom auth handler (gin middleware) -func CustomAuth(cfg *types.Config, kubeClientset kubernetes.Interface) gin.HandlerFunc { +func CustomAuth(cfg *types.Config, kubeClientset *kubernetes.Clientset) gin.HandlerFunc { basicAuthHandler := gin.BasicAuth(gin.Accounts{ // Use the config's username and password for basic auth cfg.Username: cfg.Password, @@ -53,7 +51,7 @@ func CustomAuth(cfg *types.Config, kubeClientset kubernetes.Interface) gin.Handl minIOAdminClient.CreateAllUsersGroup() minIOAdminClient.UpdateUsersInGroup(oscarUser, "all_users_group", false) - oidcHandler := getOIDCMiddleware(kubeClientset, minIOAdminClient, cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups, nil) + oidcHandler := getOIDCMiddleware(kubeClientset, minIOAdminClient, cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups) return func(c *gin.Context) { authHeader := c.GetHeader("Authorization") if strings.HasPrefix(authHeader, "Bearer ") { @@ -64,49 +62,6 @@ func CustomAuth(cfg *types.Config, kubeClientset kubernetes.Interface) gin.Handl } } -// GetLoggerMiddleware returns a gin handler as middleware to log custom info about sync/async executions -func GetLoggerMiddleware() gin.HandlerFunc { - return func(c *gin.Context) { - - // Disable default printf timestamp to avoid inconsistencies on logs - log.SetFlags(0) - - startTime := time.Now() - - // Process request - c.Next() - - endTime := time.Now() - - // Log custom information after the request is processed - logTime := endTime.Format("2006/01/02 - 15:04:05") - latency := time.Since(startTime) - status := c.Writer.Status() - clientIP := c.ClientIP() - method := c.Request.Method - path := c.Request.URL.Path - - // Get EGI UID from context (if OIDC auth is used) - uid, uidExists := c.Get("uidOrigin") - var user string - if uidExists { - user, _ = uid.(string) - } else { - // Set OSCAR as default user when no UID is found - user = "oscar" - } - - // Get source IP from context for jobs triggered through MinIO events - IPAddress, AddressExists := c.Get("IPAddress") - if AddressExists { - clientIP, _ = IPAddress.(string) - } - - log.Printf("[GIN-EXECUTIONS-LOGGER] %s | %3d | %13v | %s | %-7s %s | %s", - logTime, status, latency, clientIP, method, path, user) - } -} - func GetUIDFromContext(c *gin.Context) (string, error) { uidOrigin, uidExists := c.Get("uidOrigin") if !uidExists { diff --git a/pkg/utils/auth/auth_test.go b/pkg/utils/auth/auth_test.go deleted file mode 100644 index 1a9c50b5..00000000 --- a/pkg/utils/auth/auth_test.go +++ /dev/null @@ -1,145 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package auth - -import ( - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/gin-gonic/gin" - "github.com/grycap/oscar/v3/pkg/types" - "k8s.io/client-go/kubernetes/fake" -) - -func TestGetAuthMiddleware(t *testing.T) { - cfg := &types.Config{ - OIDCEnable: false, - Username: "testuser", - Password: "testpass", - } - kubeClientset := fake.NewSimpleClientset() - - router := gin.New() - router.Use(GetAuthMiddleware(cfg, kubeClientset)) - router.GET("/", func(c *gin.Context) { - c.JSON(http.StatusOK, "") - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/", nil) - req.SetBasicAuth("testuser", "testpass") - router.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - t.Errorf("expected status %v, got %v", http.StatusOK, w.Code) - } - - we := httptest.NewRecorder() - reqe, _ := http.NewRequest("GET", "/", nil) - reqe.SetBasicAuth("testuser", "otherpass") - router.ServeHTTP(we, reqe) - - if we.Code != http.StatusUnauthorized { - t.Errorf("expected status %v, got %v", http.StatusUnauthorized, we.Code) - } -} - -func TestGetLoggerMiddleware(t *testing.T) { - router := gin.New() - router.Use(GetLoggerMiddleware()) - router.GET("/", func(c *gin.Context) { - c.JSON(http.StatusOK, "") - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/", nil) - router.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - t.Errorf("expected status %v, got %v", http.StatusOK, w.Code) - } -} - -func TestGetUIDFromContext(t *testing.T) { - c, _ := gin.CreateTestContext(httptest.NewRecorder()) - c.Set("uidOrigin", "testuid") - - uid, err := GetUIDFromContext(c) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - if uid != "testuid" { - t.Errorf("expected uid %v, got %v", "testuid", uid) - } -} - -func TestGetMultitenancyConfigFromContext(t *testing.T) { - c, _ := gin.CreateTestContext(httptest.NewRecorder()) - mc := &MultitenancyConfig{} - c.Set("multitenancyConfig", mc) - - mcFromContext, err := GetMultitenancyConfigFromContext(c) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - if mcFromContext != mc { - t.Errorf("expected multitenancyConfig %v, got %v", mc, mcFromContext) - } -} - -func TestCustomAuth(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { - t.Errorf("Unexpected path in request, got: %s", hreq.URL.Path) - } - if hreq.URL.Path == "/minio/admin/v3/info" { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) - } else { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"status": "success"}`)) - } - })) - - cfg := &types.Config{ - OIDCEnable: false, - Username: "testuser", - Password: "testpass", - MinIOProvider: &types.MinIOProvider{ - Endpoint: server.URL, - AccessKey: "minio", - SecretKey: "minio123", - }, - } - kubeClientset := fake.NewSimpleClientset() - - router := gin.New() - router.Use(CustomAuth(cfg, kubeClientset)) - router.GET("/", func(c *gin.Context) { - c.JSON(http.StatusOK, "") - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/", nil) - req.SetBasicAuth("testuser", "testpass") - router.ServeHTTP(w, req) - - if w.Code != http.StatusOK { - t.Errorf("expected status %v, got %v", http.StatusOK, w.Code) - } -} diff --git a/pkg/utils/auth/multitenancy.go b/pkg/utils/auth/multitenancy.go index a9f50d6e..8e5a8118 100644 --- a/pkg/utils/auth/multitenancy.go +++ b/pkg/utils/auth/multitenancy.go @@ -32,12 +32,12 @@ const ServicesNamespace = "oscar-svc" const ServiceLabelLength = 8 type MultitenancyConfig struct { - kubeClientset kubernetes.Interface + kubeClientset *kubernetes.Clientset owner_uid string usersCache []string } -func NewMultitenancyConfig(kubeClientset kubernetes.Interface, uid string) *MultitenancyConfig { +func NewMultitenancyConfig(kubeClientset *kubernetes.Clientset, uid string) *MultitenancyConfig { return &MultitenancyConfig{ kubeClientset: kubeClientset, owner_uid: uid, diff --git a/pkg/utils/auth/multitenancy_test.go b/pkg/utils/auth/multitenancy_test.go deleted file mode 100644 index 2f93a055..00000000 --- a/pkg/utils/auth/multitenancy_test.go +++ /dev/null @@ -1,149 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package auth - -import ( - "context" - "encoding/base64" - "testing" - - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes/fake" -) - -func TestNewMultitenancyConfig(t *testing.T) { - clientset := fake.NewSimpleClientset() - uid := "test-uid" - mc := NewMultitenancyConfig(clientset, uid) - - if mc.owner_uid != uid { - t.Errorf("expected owner_uid to be %s, got %s", uid, mc.owner_uid) - } -} - -func TestUpdateCache(t *testing.T) { - clientset := fake.NewSimpleClientset() - mc := NewMultitenancyConfig(clientset, "test-uid") - - mc.UpdateCache("user1") - if len(mc.usersCache) != 1 { - t.Errorf("expected usersCache length to be 1, got %d", len(mc.usersCache)) - } -} - -func TestClearCache(t *testing.T) { - clientset := fake.NewSimpleClientset() - mc := NewMultitenancyConfig(clientset, "test-uid") - - mc.UpdateCache("user1") - mc.ClearCache() - if len(mc.usersCache) != 0 { - t.Errorf("expected usersCache length to be 0, got %d", len(mc.usersCache)) - } -} - -func TestUserExists(t *testing.T) { - clientset := fake.NewSimpleClientset() - mc := NewMultitenancyConfig(clientset, "test-uid") - - secret := &v1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "user1", - Namespace: ServicesNamespace, - }, - } - clientset.CoreV1().Secrets(ServicesNamespace).Create(context.TODO(), secret, metav1.CreateOptions{}) - - exists := mc.UserExists("user1@egi.eu") - if !exists { - t.Errorf("expected user1 to exist") - } -} - -func TestCreateSecretForOIDC(t *testing.T) { - clientset := fake.NewSimpleClientset() - mc := NewMultitenancyConfig(clientset, "test-uid") - - err := mc.CreateSecretForOIDC("user1@egi.eu", "secret-key") - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - secret, err := clientset.CoreV1().Secrets(ServicesNamespace).Get(context.TODO(), "user1", metav1.GetOptions{}) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - if secret.StringData["secretKey"] != "secret-key" { - t.Errorf("expected secretKey to be 'secret-key', got %s", secret.StringData["secretKey"]) - } -} - -func TestGetUserCredentials(t *testing.T) { - clientset := fake.NewSimpleClientset() - mc := NewMultitenancyConfig(clientset, "test-uid") - - secret := &v1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "user1", - Namespace: ServicesNamespace, - }, - Data: map[string][]byte{ - "accessKey": []byte("access-key"), - "secretKey": []byte("secret-key"), - }, - } - clientset.CoreV1().Secrets(ServicesNamespace).Create(context.TODO(), secret, metav1.CreateOptions{}) - - accessKey, secretKey, err := mc.GetUserCredentials("user1@egi.eu") - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - if accessKey != "access-key" { - t.Errorf("expected accessKey to be 'access-key', got %s", accessKey) - } - - if secretKey != "secret-key" { - t.Errorf("expected secretKey to be 'secret-key', got %s", secretKey) - } -} - -func TestGenerateRandomKey(t *testing.T) { - key, err := GenerateRandomKey(32) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - dkey, _ := base64.RawURLEncoding.DecodeString(key) - if len(dkey) != 32 { - t.Errorf("expected key length to be 32, got %d", len(key)) - } -} - -func TestCheckUsersInCache(t *testing.T) { - clientset := fake.NewSimpleClientset() - mc := NewMultitenancyConfig(clientset, "test-uid") - - mc.UpdateCache("user1") - mc.UpdateCache("user2") - - notFoundUsers := mc.CheckUsersInCache([]string{"user1", "user3"}) - if len(notFoundUsers) != 1 { - t.Errorf("expected notFoundUsers length to be 1, got %d", len(notFoundUsers)) - } -} diff --git a/pkg/utils/auth/oidc.go b/pkg/utils/auth/oidc.go index 40dbd54d..9fb2a21f 100644 --- a/pkg/utils/auth/oidc.go +++ b/pkg/utils/auth/oidc.go @@ -51,8 +51,8 @@ type oidcManager struct { // userInfo custom struct to store essential fields from UserInfo type userInfo struct { - Subject string - Groups []string + subject string + groups []string } // newOIDCManager returns a new oidcManager or error if the oidc.Provider can't be created @@ -76,11 +76,8 @@ func NewOIDCManager(issuer string, subject string, groups []string) (*oidcManage } // getIODCMiddleware returns the Gin's handler middleware to validate OIDC-based auth -func getOIDCMiddleware(kubeClientset kubernetes.Interface, minIOAdminClient *utils.MinIOAdminClient, issuer string, subject string, groups []string, oidcConfig *oidc.Config) gin.HandlerFunc { +func getOIDCMiddleware(kubeClientset *kubernetes.Clientset, minIOAdminClient *utils.MinIOAdminClient, issuer string, subject string, groups []string) gin.HandlerFunc { oidcManager, err := NewOIDCManager(issuer, subject, groups) - if oidcConfig != nil { - oidcManager.config = oidcConfig - } if err != nil { return func(c *gin.Context) { c.AbortWithStatus(http.StatusUnauthorized) @@ -99,17 +96,17 @@ func getOIDCMiddleware(kubeClientset kubernetes.Interface, minIOAdminClient *uti rawToken := strings.TrimPrefix(authHeader, "Bearer ") // Check the token - if !oidcManager.IsAuthorised(rawToken) { + if !oidcManager.isAuthorised(rawToken) { c.AbortWithStatus(http.StatusUnauthorized) return } - ui, err := oidcManager.GetUserInfo(rawToken) + ui, err := oidcManager.getUserInfo(rawToken) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintf("%v", err)) return } - uid := ui.Subject + uid := ui.subject // Check if exist MinIO user in cached users list minioUserExists := mc.UserExists(uid) @@ -145,8 +142,8 @@ func (om *oidcManager) clearExpired() { } } -// GetUserInfo obtains UserInfo from the issuer -func (om *oidcManager) GetUserInfo(rawToken string) (*userInfo, error) { +// getUserInfo obtains UserInfo from the issuer +func (om *oidcManager) getUserInfo(rawToken string) (*userInfo, error) { ot := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: rawToken}) // Get OIDC UserInfo @@ -163,8 +160,8 @@ func (om *oidcManager) GetUserInfo(rawToken string) (*userInfo, error) { // Create "userInfo" struct and add the groups return &userInfo{ - Subject: ui.Subject, - Groups: getGroups(claims.EdupersonEntitlement), + subject: ui.Subject, + groups: getGroups(claims.EdupersonEntitlement), }, nil } @@ -187,11 +184,11 @@ func getGroups(urns []string) []string { // UserHasVO checks if the user contained on the request token is enrolled on a specific VO func (om *oidcManager) UserHasVO(rawToken string, vo string) (bool, error) { - ui, err := om.GetUserInfo(rawToken) + ui, err := om.getUserInfo(rawToken) if err != nil { return false, err } - for _, gr := range ui.Groups { + for _, gr := range ui.groups { if vo == gr { return true, nil } @@ -200,15 +197,16 @@ func (om *oidcManager) UserHasVO(rawToken string, vo string) (bool, error) { } func (om *oidcManager) GetUID(rawToken string) (string, error) { - ui, err := om.GetUserInfo(rawToken) + ui, err := om.getUserInfo(rawToken) + oidcLogger.Println("received uid: ", ui.subject) if err != nil { - return "", err + return ui.subject, nil } - return ui.Subject, nil + return "", err } -// IsAuthorised checks if a token is authorised to access the API -func (om *oidcManager) IsAuthorised(rawToken string) bool { +// isAuthorised checks if a token is authorised to access the API +func (om *oidcManager) isAuthorised(rawToken string) bool { // Check if the token is valid _, err := om.provider.Verifier(om.config).Verify(context.TODO(), rawToken) if err != nil { @@ -219,7 +217,7 @@ func (om *oidcManager) IsAuthorised(rawToken string) bool { ui, found := om.tokenCache[rawToken] if !found { // Get userInfo from the issuer - ui, err = om.GetUserInfo(rawToken) + ui, err = om.getUserInfo(rawToken) if err != nil { return false } @@ -233,12 +231,12 @@ func (om *oidcManager) IsAuthorised(rawToken string) bool { // Check if is authorised // Same subject - if ui.Subject == om.subject { + if ui.subject == om.subject { return true } // Groups - for _, tokenGroup := range ui.Groups { + for _, tokenGroup := range ui.groups { for _, authGroup := range om.groups { if tokenGroup == authGroup { return true diff --git a/pkg/utils/auth/oidc_test.go b/pkg/utils/auth/oidc_test.go deleted file mode 100644 index 142e520f..00000000 --- a/pkg/utils/auth/oidc_test.go +++ /dev/null @@ -1,219 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package auth - -import ( - "crypto/rand" - "crypto/rsa" - "fmt" - "net/http" - "net/http/httptest" - "testing" - "time" - - "github.com/coreos/go-oidc/v3/oidc" - "github.com/gin-gonic/gin" - "github.com/golang-jwt/jwt/v4" - "github.com/grycap/oscar/v3/pkg/types" - "github.com/grycap/oscar/v3/pkg/utils" - "k8s.io/client-go/kubernetes/fake" -) - -func TestNewOIDCManager(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path == "/.well-known/openid-configuration" { - rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `"}`)) - } - })) - - issuer := server.URL - subject := "test-subject" - groups := []string{"group1", "group2"} - - oidcManager, err := NewOIDCManager(issuer, subject, groups) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - if oidcManager == nil { - t.Errorf("expected oidcManager to be non-nil") - } -} - -func TestGetUserInfo(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - fmt.Println(hreq.URL.Path) - rw.Header().Set("Content-Type", "application/json") - if hreq.URL.Path == "/.well-known/openid-configuration" { - rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) - } else if hreq.URL.Path == "/userinfo" { - rw.Write([]byte(`{"sub": "test-subject", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) - } - })) - - issuer := server.URL - subject := "test-subject" - groups := []string{"group1", "group2"} - - oidcManager, err := NewOIDCManager(issuer, subject, groups) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - rawToken := "test-token" - ui, err := oidcManager.GetUserInfo(rawToken) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - if ui.Subject != "test-subject" { - t.Errorf("expected subject to be %v, got %v", "test-subject", ui.Subject) - } - if len(ui.Groups) != 1 || ui.Groups[0] != "group1" { - t.Errorf("expected groups to be %v, got %v", []string{"group1"}, ui.Groups) - } -} - -func TestIsAuthorised(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - rw.Header().Set("Content-Type", "application/json") - if hreq.URL.Path == "/.well-known/openid-configuration" { - rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) - } else if hreq.URL.Path == "/userinfo" { - rw.Write([]byte(`{"sub": "user1@egi.eu", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) - } - })) - - issuer := server.URL - subject := "user1@egi.eu" - groups := []string{"group1", "group2"} - - oidcManager, err := NewOIDCManager(issuer, subject, groups) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - rawToken := GetToken(issuer, subject) - oidcManager.config.InsecureSkipSignatureCheck = true - - if !oidcManager.IsAuthorised(rawToken) { - t.Errorf("expected token to be authorised") - } - - resg1, err2 := oidcManager.UserHasVO(rawToken, "group1") - if err2 != nil { - t.Errorf("expected no error, got %v", err) - } - if !resg1 { - t.Errorf("expected user to have VO") - } - resg2, err3 := oidcManager.UserHasVO(rawToken, "group2") - if err3 != nil { - t.Errorf("expected no error, got %v", err) - } - if resg2 { - t.Errorf("expected user not to have VO") - } - - uid, _ := oidcManager.GetUID(rawToken) - if uid != subject { - t.Errorf("expected uid to be %v, got %v", subject, uid) - } -} - -func TestGetOIDCMiddleware(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path == "/.well-known/openid-configuration" { - rw.Write([]byte(`{"issuer": "http://` + hreq.Host + `", "userinfo_endpoint": "http://` + hreq.Host + `/userinfo"}`)) - } else if hreq.URL.Path == "/userinfo" { - rw.Write([]byte(`{"sub": "user@egi.eu", "eduperson_entitlement": ["urn:mace:egi.eu:group:group1"]}`)) - } else if hreq.URL.Path == "/minio/admin/v3/info" { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"Mode": "local", "Region": "us-east-1"}`)) - } else { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"status": "success"}`)) - } - })) - - kubeClientset := fake.NewSimpleClientset() - cfg := types.Config{ - MinIOProvider: &types.MinIOProvider{ - Endpoint: server.URL, - Verify: false, - }, - } - minIOAdminClient, _ := utils.MakeMinIOAdminClient(&cfg) - issuer := server.URL - subject := "user@egi.eu" - groups := []string{"group1", "group2"} - - oidcConfig := &oidc.Config{ - InsecureSkipSignatureCheck: true, - SkipClientIDCheck: true, - } - middleware := getOIDCMiddleware(kubeClientset, minIOAdminClient, issuer, subject, groups, oidcConfig) - if middleware == nil { - t.Errorf("expected middleware to be non-nil") - } - - scenarios := []struct { - token string - code int - name string - }{ - { - name: "invalid-token", - token: "invalid-token", - code: http.StatusUnauthorized, - }, - { - name: "valid-token", - token: GetToken(issuer, subject), - code: http.StatusOK, - }, - } - for _, s := range scenarios { - t.Run(s.name, func(t *testing.T) { - // Create a new Gin context - gin.SetMode(gin.TestMode) - w := httptest.NewRecorder() - c, _ := gin.CreateTestContext(w) - - // Test the middleware with an invalid token - c.Request = &http.Request{ - Header: http.Header{ - "Authorization": []string{"Bearer " + s.token}, - }, - } - middleware(c) - if c.Writer.Status() != s.code { - t.Errorf("expected status to be %v, got %v", s.code, c.Writer.Status()) - } - }) - } -} - -func GetToken(issuer string, subject string) string { - claims := jwt.MapClaims{ - "iss": issuer, - "sub": subject, - "exp": time.Now().Add(1 * time.Hour).Unix(), - "iat": time.Now().Unix(), - } - token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims) - privateKey, _ := rsa.GenerateKey(rand.Reader, 1024) - rawToken, _ := token.SignedString(privateKey) - return rawToken -} diff --git a/pkg/utils/minio_test.go b/pkg/utils/minio_test.go deleted file mode 100644 index 8121c579..00000000 --- a/pkg/utils/minio_test.go +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package utils - -import ( - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/grycap/oscar/v3/pkg/types" -) - -func createMinIOConfig() (types.Config, *httptest.Server) { - // Create a fake MinIO server - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if !strings.HasPrefix(hreq.URL.Path, "/minio/admin/v3/") { - rw.WriteHeader(http.StatusNotFound) - } - - if hreq.URL.Path == "/minio/admin/v3/info-canned-policy" { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"PolicyName": "testpolicy", "Policy": {"Version": "version","Statement": [{"Resource": ["res"]}]}}`)) - } else { - rw.WriteHeader(http.StatusOK) - rw.Write([]byte(`{"Status": "success"}`)) - } - })) - - cfg := types.Config{ - MinIOProvider: &types.MinIOProvider{ - Endpoint: server.URL, - Region: "us-east-1", - AccessKey: "minioadmin", - SecretKey: "minioadmin", - Verify: false, - }, - Name: "test", - Namespace: "default", - ServicePort: 8080, - } - - return cfg, server -} - -func TestCreateMinIOUser(t *testing.T) { - // Create a fake MinIO server - cfg, server := createMinIOConfig() - - client, err := MakeMinIOAdminClient(&cfg) - - if err != nil { - t.Errorf("Error creating MinIO client: %v", err) - } - - err = client.CreateMinIOUser("testuser", "testpassword") - - if err != nil { - t.Errorf("Error creating MinIO user: %v", err) - } - - // Close the fake MinIO server - defer server.Close() -} - -func TestPublicToPrivateBucket(t *testing.T) { - // Create a fake MinIO server - cfg, server := createMinIOConfig() - - client, _ := MakeMinIOAdminClient(&cfg) - err := client.PublicToPrivateBucket("testbucket", []string{"testuser"}) - - if err != nil { - t.Errorf("Error creating MinIO user: %v", err) - } - - // Close the fake MinIO server - defer server.Close() -} - -func TestCreateServiceGroup(t *testing.T) { - // Create a fake MinIO server - cfg, server := createMinIOConfig() - - client, _ := MakeMinIOAdminClient(&cfg) - err := client.CreateServiceGroup("bucket") - - if err != nil { - t.Errorf("Error creating MinIO user: %v", err) - } - - // Close the fake MinIO server - defer server.Close() -} - -func TestPrivateToPublicBucket(t *testing.T) { - // Create a fake MinIO server - cfg, server := createMinIOConfig() - - client, _ := MakeMinIOAdminClient(&cfg) - err := client.PrivateToPublicBucket("testbucket") - - if err != nil { - t.Errorf("Error creating MinIO user: %v", err) - } - - // Close the fake MinIO server - defer server.Close() -} diff --git a/pkg/utils/of_scaler_test.go b/pkg/utils/of_scaler_test.go deleted file mode 100644 index 1a35370b..00000000 --- a/pkg/utils/of_scaler_test.go +++ /dev/null @@ -1,196 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package utils - -import ( - "bytes" - "log" - "net/http" - "net/http/httptest" - "testing" - "time" - - "github.com/grycap/oscar/v3/pkg/types" - "github.com/prometheus/client_golang/api" - v1 "github.com/prometheus/client_golang/api/prometheus/v1" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes/fake" -) - -func TestNewOFScaler(t *testing.T) { - kubeClientset := fake.NewSimpleClientset() - cfg := &types.Config{ - OpenfaasNamespace: "openfaas", - ServicesNamespace: "default", - OpenfaasPort: 8080, - OpenfaasBasicAuthSecret: "basic-auth", - OpenfaasPrometheusPort: 9090, - OpenfaasScalerInactivityDuration: "5m", - OpenfaasScalerInterval: "1m", - } - - scaler := NewOFScaler(kubeClientset, cfg) - - if scaler.openfaasNamespace != "openfaas" { - t.Errorf("Expected openfaasNamespace to be 'openfaas', got %s", scaler.openfaasNamespace) - } - if scaler.namespace != "default" { - t.Errorf("Expected namespace to be 'default', got %s", scaler.namespace) - } - if scaler.gatewayEndpoint != "http://gateway.openfaas:8080" { - t.Errorf("Expected gatewayEndpoint to be 'http://gateway.openfaas:8080', got %s", scaler.gatewayEndpoint) - } - if scaler.prometheusEndpoint != "http://prometheus.openfaas:9090" { - t.Errorf("Expected prometheusEndpoint to be 'http://prometheus.openfaas:9090', got %s", scaler.prometheusEndpoint) - } -} - -func TestGetScalableFunctions(t *testing.T) { - // Create a deployment with the label "com.openfaas.scale.zero" set to "true" - deployment := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-function", - Namespace: "default", - }, - Spec: appsv1.DeploymentSpec{ - Template: corev1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: map[string]string{ - "com.openfaas.scale.zero": "true", - }, - }, - }, - }, - Status: appsv1.DeploymentStatus{ - Replicas: 1, - }, - } - - kubeClientset := fake.NewSimpleClientset(deployment) - scaler := &OpenfaasScaler{ - kubeClientset: kubeClientset, - namespace: "default", - } - - functions, err := scaler.getScalableFunctions() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if len(functions) != 1 { - t.Errorf("Expected 1 function, got %d", len(functions)) - } - if functions[0] != "test-function" { - t.Errorf("Expected function name to be 'test-function', got %s", functions[0]) - } -} - -func TestScaleToZero(t *testing.T) { - kubeClientset := fake.NewSimpleClientset() - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - })) - - scaler := &OpenfaasScaler{ - kubeClientset: kubeClientset, - gatewayEndpoint: server.URL, - } - - err := scaler.scaleToZero("test-function", "user", "pass", server.Client()) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } -} - -func TestIsIdle(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path == "/api/v1/query" { - rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"0"]}]},"error":null}`)) - } - })) - - prometheusClient, _ := api.NewClient(api.Config{ - Address: server.URL, - }) - prometheusAPIClient := v1.NewAPI(prometheusClient) - - idle := isIdle("test-function", "default", "5m", prometheusAPIClient) - if !idle { - t.Errorf("Expected function to be idle") - } -} - -func TestStart(t *testing.T) { - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "basic-auth", - Namespace: "openfaas", - }, - Data: map[string][]byte{ - "basic-auth-user": []byte("user"), - "basic-auth-password": []byte("pass"), - }, - } - deployment := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-function", - Namespace: "default", - }, - Spec: appsv1.DeploymentSpec{ - Template: corev1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: map[string]string{ - "com.openfaas.scale.zero": "true", - }, - }, - }, - }, - Status: appsv1.DeploymentStatus{ - Replicas: 1, - }, - } - kubeClientset := fake.NewSimpleClientset(secret, deployment) - server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, hreq *http.Request) { - if hreq.URL.Path == "/api/v1/query" { - rw.Write([]byte(`{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1620810000,"1"]}]},"error":null}`)) - } - })) - - cfg := &types.Config{ - OpenfaasNamespace: "openfaas", - ServicesNamespace: "default", - OpenfaasPort: 8080, - OpenfaasBasicAuthSecret: "basic-auth", - OpenfaasPrometheusPort: 9090, - OpenfaasScalerInactivityDuration: "5m", - OpenfaasScalerInterval: "0.5s", - } - - scaler := NewOFScaler(kubeClientset, cfg) - scaler.gatewayEndpoint = server.URL - scaler.prometheusEndpoint = server.URL - - var buf bytes.Buffer - scalerLogger = log.New(&buf, "[OF-SCALER] ", log.Flags()) - - go scaler.Start() - time.Sleep(1 * time.Second) - - if buf.String() != "" { - t.Errorf("Unexpected log output: %s", buf.String()) - } -} diff --git a/pkg/utils/token_test.go b/pkg/utils/token_test.go deleted file mode 100644 index c2b25867..00000000 --- a/pkg/utils/token_test.go +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package utils - -import ( - "encoding/hex" - "testing" -) - -// TestGenerateTokenLength checks if the generated token has the correct length -func TestGenerateTokenLength(t *testing.T) { - token := GenerateToken() - expectedLength := 64 // 32 bytes * 2 (hex encoding) - if len(token) != expectedLength { - t.Errorf("Expected token length of %d, but got %d", expectedLength, len(token)) - } -} - -// TestGenerateTokenUniqueness checks if multiple generated tokens are unique -func TestGenerateTokenUniqueness(t *testing.T) { - token1 := GenerateToken() - token2 := GenerateToken() - if token1 == token2 { - t.Error("Expected tokens to be unique, but they are the same") - } -} - -// TestGenerateTokenHexEncoding checks if the generated token is a valid hex string -func TestGenerateTokenHexEncoding(t *testing.T) { - token := GenerateToken() - _, err := hex.DecodeString(token) - if err != nil { - t.Errorf("Expected a valid hex string, but got an error: %v", err) - } -} diff --git a/pkg/utils/yunikorn.go b/pkg/utils/yunikorn.go index fbf9fb07..38f3f6f0 100644 --- a/pkg/utils/yunikorn.go +++ b/pkg/utils/yunikorn.go @@ -151,7 +151,7 @@ func DeleteYunikornQueue(cfg *types.Config, kubeClientset kubernetes.Interface, // getOscarQueue returns a pointer to the OSCAR's Yunikorn queue (configs.QueueConfig) // If the Queue doesn't exists, create a new one in the SchedulerConfig -// (the existence of the default partition and the root queue is assumed) +// (the existance of the default partition and the root queue is assumed) func getOscarQueue(schedulerConfig *configs.SchedulerConfig) *configs.QueueConfig { // First get a pointer to the root queue root := &configs.QueueConfig{} diff --git a/pkg/utils/yunikorn_test.go b/pkg/utils/yunikorn_test.go deleted file mode 100644 index bef3181d..00000000 --- a/pkg/utils/yunikorn_test.go +++ /dev/null @@ -1,122 +0,0 @@ -/* -Copyright (C) GRyCAP - I3M - UPV - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package utils - -import ( - "testing" - - "github.com/apache/yunikorn-core/pkg/common/configs" - "github.com/grycap/oscar/v3/pkg/types" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes/fake" -) - -func getFakeClientset() (*types.Config, *fake.Clientset) { - cfg := &types.Config{ - YunikornNamespace: "default", - YunikornConfigMap: "yunikorn-config", - YunikornConfigFileName: "yunikorn.yaml", - } - - cfgmap := &v1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: cfg.YunikornConfigMap, - Namespace: cfg.YunikornNamespace, - }, - Data: map[string]string{ - cfg.YunikornConfigFileName: ` -partitions: - - name: default - queues: - - name: root - queues: - - name: oscar - queues: - - name: test-service -`, - }, - } - return cfg, fake.NewSimpleClientset(cfgmap) -} - -func TestReadYunikornConfig(t *testing.T) { - cfg, clientset := getFakeClientset() - - schedulerConfig, err := readYunikornConfig(cfg, clientset) - if err != nil { - t.Errorf("Error Reading Yunikorn config: %v", err) - } - - if schedulerConfig.Partitions[0].Name != "default" { - t.Errorf("Error Reading Yunikorn config. SchedulerConfig is nil") - } -} - -func TestUpdateYunikornConfig(t *testing.T) { - cfg, clientset := getFakeClientset() - - schedulerConfig := &configs.SchedulerConfig{ - Partitions: []configs.PartitionConfig{ - { - Name: "default", - Queues: []configs.QueueConfig{ - { - Name: "root", - Queues: []configs.QueueConfig{ - { - Name: "oscar", - }, - }, - }, - }, - }, - }, - } - - err := updateYunikornConfig(cfg, clientset, schedulerConfig) - if err != nil { - t.Errorf("Error Updating Yunikorn config: %v", err) - } -} - -func TestAddYunikornQueue(t *testing.T) { - cfg, clientset := getFakeClientset() - - svc := &types.Service{ - Name: "test-service", - TotalMemory: "4Gi", - TotalCPU: "2", - } - - err := AddYunikornQueue(cfg, clientset, svc) - if err != nil { - t.Errorf("Error Adding Yunikorn config: %v", err) - } -} - -func TestDeleteYunikornQueue(t *testing.T) { - cfg, clientset := getFakeClientset() - - svc := &types.Service{ - Name: "test-service", - } - - err := DeleteYunikornQueue(cfg, clientset, svc) - if err != nil { - t.Errorf("Error Deleting Yunikorn config: %v", err) - } -} diff --git a/ui b/ui index 3ce8470b..98de936c 160000 --- a/ui +++ b/ui @@ -1 +1 @@ -Subproject commit 3ce8470b994e73789ec086e612af66b9721f2aff +Subproject commit 98de936c5923d3b3ccaef500c1a92f35009bbf53 From c7e68b6facdc1972d941eb62d1d3018e833bf2bc Mon Sep 17 00:00:00 2001 From: esparig <5576714+esparig@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:21:22 +0100 Subject: [PATCH 086/106] Fix line --- docs/integration-egi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integration-egi.md b/docs/integration-egi.md index 4356f57f..f7a348c2 100644 --- a/docs/integration-egi.md +++ b/docs/integration-egi.md @@ -98,6 +98,7 @@ Once logged in via EGI Check-In you can obtain an Access Token with one of this oidc-token ``` where `account-short-name` is the name of your account configuration. + * From the EGI Check-In Token Portal: [https://aai.egi.eu/token](https://aai.egi.eu/token) ![egi-checkin-token-portal.png](images/oidc/egi-checkin-token-portal.png) From 1d566eadde1a64fa0ac4ba90d621f89c4ad1748b Mon Sep 17 00:00:00 2001 From: esparig <5576714+esparig@users.noreply.github.com> Date: Tue, 26 Nov 2024 18:10:32 +0100 Subject: [PATCH 087/106] Uploaded example for stable diffusion --- examples/stable-diffusion/Dockerfile | 21 ++++++++++++++ examples/stable-diffusion/README.md | 31 +++++++++++++++++++++ examples/stable-diffusion/prompt.txt | 1 + examples/stable-diffusion/prompt.txt.png | Bin 0 -> 391565 bytes examples/stable-diffusion/script.sh | 9 ++++++ examples/stable-diffusion/stable-diff.yaml | 17 +++++++++++ 6 files changed, 79 insertions(+) create mode 100644 examples/stable-diffusion/Dockerfile create mode 100644 examples/stable-diffusion/README.md create mode 100644 examples/stable-diffusion/prompt.txt create mode 100644 examples/stable-diffusion/prompt.txt.png create mode 100644 examples/stable-diffusion/script.sh create mode 100644 examples/stable-diffusion/stable-diff.yaml diff --git a/examples/stable-diffusion/Dockerfile b/examples/stable-diffusion/Dockerfile new file mode 100644 index 00000000..65bdbd95 --- /dev/null +++ b/examples/stable-diffusion/Dockerfile @@ -0,0 +1,21 @@ +FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 + +RUN apt update && \ + apt install -y --no-install-recommends git wget python3-pip && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN git clone https://github.com/srisco/stable-diffusion-tensorflow.git + +WORKDIR stable-diffusion-tensorflow + +RUN pip install -r requirements.txt && \ + rm -rf /root/.cache/pip/* && \ + rm -rf /tmp/* + +# DOWNLOAD WEIGHTS +RUN mkdir -p /root/.keras/datasets && \ + wget https://huggingface.co/fchollet/stable-diffusion/resolve/main/text_encoder.h5 -O /root/.keras/datasets/text_encoder.h5 && \ + wget https://huggingface.co/fchollet/stable-diffusion/resolve/main/diffusion_model.h5 -O /root/.keras/datasets/diffusion_model.h5 && \ + wget https://huggingface.co/fchollet/stable-diffusion/resolve/main/decoder.h5 -O /root/.keras/datasets/decoder.h5 && \ + wget https://huggingface.co/divamgupta/stable-diffusion-tensorflow/resolve/main/encoder_newW.h5 -O /root/.keras/datasets/encoder_newW.h5 diff --git a/examples/stable-diffusion/README.md b/examples/stable-diffusion/README.md new file mode 100644 index 00000000..3f8b7512 --- /dev/null +++ b/examples/stable-diffusion/README.md @@ -0,0 +1,31 @@ +# Stable Diffusion + +This example is based on a Keras / Tensorflow implementation of Stable Diffusion. The following repositories were used for the creation of the image: + +* [srisco/stable-diffusion-tensorflow](https://github.com/srisco/stable-diffusion-tensorflow) +* [huggingface.co/fchollet/stable-diffusion](https://huggingface.co/fchollet/stable-diffusion) +* [huggingface.co/divamgupta/stable-diffusion-tensorflow](https://huggingface.co/divamgupta/stable-diffusion-tensorflow/) + +The image if pushed to a public github registry [here](ghcr.io/grycap/stable-diffusion-tf:latest) but you can see the Dockerfile that generates it [here](Dockerfile). + +## Deploy an OSCAR cluster +Follow the instructions in the documentation for your desired IaaS cloud provider. +[See Deployment](https://docs.oscar.grycap.net/) + +## Create the OSCAR Service + +The Service can be created using the OSCAR GUI by providing the [FDL](stable-diff.yaml) and the [script.sh](script.sh) file. + +![OSCAR GUI Creation of a service](https://oscar.grycap.net/images/blog/post-20210803-1/create_service_gui.png) + +## Upload the input file to the MinIO bucket + +Once the service is created, you can upload the input file to the bucket. The input file should be a file containing the prompt that you want to process. + +For example, using the following prompt: + +`a chicken making a 360 with a skateboard with background flames` + +The following image is generated: + +![Cool chicken](prompt.txt.png) \ No newline at end of file diff --git a/examples/stable-diffusion/prompt.txt b/examples/stable-diffusion/prompt.txt new file mode 100644 index 00000000..b27d4aad --- /dev/null +++ b/examples/stable-diffusion/prompt.txt @@ -0,0 +1 @@ +a chicken making a 360 with a skateboard with background flames diff --git a/examples/stable-diffusion/prompt.txt.png b/examples/stable-diffusion/prompt.txt.png new file mode 100644 index 0000000000000000000000000000000000000000..543cffb64d03b2147b18258c37791d16054aefa8 GIT binary patch literal 391565 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⁣m#l^=zJl*|u98WmC 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%0D)yYq5Z?6;T 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
  • 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

    {r5hcPsfG&v%B}&{9zH8TRU|v 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

    -;!7`l@)N)M+Uu`!l_!pGoA5_ zn^@-7Dpi(ZrbVjHvzdlFm(sgs$#`!Hp+o`><`y0R>%)A}8+s&?7pW0NVnnz)o_ET&9>f-A5?VEG!+U7D!5qU5jH^-wz5Wv~#>G62T zz78VneFngx@^PAKsZvX!GEjB(Iu3*|&(mfzB2ZXB(6~9vuJf*Ke>@<=xEaFC)ev#B z*&N$ZSQwb7sP2hL$(>**m7)U7fGh=r2#I>{<2YIGlh0pe1b zncTFLv1yNRETXE&WEKDpK<2KdhDWym$g?pd1D;Fg6j(VK0)TRK72(U2sLd?urO@V;4G_yt~ z922EXGs3zXX1O&p2}&s?!y44OuUYhUqTP~R@F32gAAkrQqkF$bbO@Y+1A_?F9W%5pkSRmtY_$_nlHh;{V2-pv z3IT-Zl+z^TILAs```90{*;M&Ggv=YYCi2e2X>v69ZK zUNp>sP|cos?=v6!?%(pa|MFi&-6BvaMIE>b37_5>hqH3?#>m(W3DGh8G#97TLP0ES zGkOFW;yZrphradS`facN^}q4#JBJ_tlRxl|-}1h@ANcUiZ+g#D3~io+hfqVJa7Ppz z%8h5=ZqGawU-|cBT z%M+7`y7nj9ji-Jc?p%CfJiZw>o^CS(0xi2Vx)b$7BYg+zVa zR`ZDD0MsL#h_gZ?1J*;cnE>6xT8n`BI1l3x8mj6RIx7`1GXN;1LRbU}F_Tbeks2PR z?iyy+wGE}3Y5+x3a0~~Hs6$m%?KajD0IC)dX5O3PAdxh*8v(M&;nAbrc1K*)yO|D~ z@#^6o0f;$N0kAjiswdkG1iAWVvn^8hhx^D34yWhm)8(;_o7Qy`F^q%tc6GJ4Zlwqp zlTxO6>d-+L0L&}^WE_a_Fio4yNthAKI1Xwt9j*?SS2xbjd$)*CRg2~1*qonUJ-8B~ za0o=}s;%Ql09MDrToK5_99%?-6t$k4EdrTgcrX{@%;}5iZ~$;7iilye1-0I0rVuIn ztGRAU09b3wI7Y19Iw)}=Vl!)PCPvkcIZFu+SR*=k5UYBhX9GxWOo&JT^wt6b(4~+~ zs$C1!QpC+Y&`sR~h!otWgLdtzfI+PTpt(zB-GYN|z03u~@VRBFkbz#BAOZHqTcC5OTW$Aah+mu$(zpeQv&7Q<-~+fB|mEz{CMi z3Jl}|03HAl1daj71nz;fWO+eE1WBer1O%8lGUg$)sQMR)PON_?vJnmdh}U?@K#!oW zHy0sh?pq$FOV)IL0g6>cx-^O`qyKW;tQb(lq77XliDKb;!!oa9{mZMr2@xW-Etq5% zA(^@}{r*4lhko%N|I@=4Ui+439(xq+OON*Bu)z&|*N=S*?@k_j`pEzxSW}%A0d8t# z5*W-Sgv|{dV5r~r@BY#G*5fzN}E z{?r2Ci;o<$9|!<2vXWv&f!rgTXXrT1k3S9{{?2z^;ePuu@qVO}OS(K>{aT#9iQ{kn z=JB8ZeEjgg0W<)hEppH_&d*b8nN4W8G{DFiR0ncOOuAXm|vO12E;G zHWaZW1I)5oNxMp6?S=tTB%y!nX8kCIDOfF9>%{CHt*cwKHbn#n)jH18F{=+m#JZb1 z1of_}=B283WC^thkRqxb5h)3+2t*u8P2IHiuByl5L_pJY01Jx37&Zek=K*96!%$RBTi=W$0wH3lRn^@)3qeF3>($jIa1il4O-Lvrbr|ia0BF%8 z078ioAc#xvy>|srVsMYmb|_MV>^NNwV1Zt00Sn|DkRmWL>(5y@gU}2L7quSdW)4VM z{zz=#h6KFAeI5>gjN+CfhcR;yN(nVB%tSKH&ATCEgtykryJ|Pp<=qNM#H!ln+02ko zq?m_UCjet$kvzW`ifS_lh#&-F>dBY}0Al7E2{SlA_DYy}cL>}kyzR@E^tKy^ZJbP>*u`N(-OkNNyJz9vN{ zszZSJ0fDqTd(z1H$xO+5AQ13!w&M!?_;Pw@92hL_uDCvnay5wcK`w{?g5q4Wym5UT z0<4PGC4n;V8n0O|th|KG6`7mGdq4W@@B8uZ{pG*>S3fvheD&evVkLFB%h4}05RM-`@w(b4>_n8LIXoYgW&uEmc=QU@A^f~ zls}l~0<(bIc0Go}(w%ettgP@CEb}-yScJvkPd-ulr(c~_Hf87c9EtJPZg}Td0G~i$ zzy5i<_e=L)ef6Jw;6op$JC6g^fCyYEfaMxr?%h=RiSl`AkYw|OQOC+PDWo?WDH zd3gokRTu#^TL6(Ff-uD~1_7o@unc!n%iLOc6cGcTj}syWgsTx@9jciXk^5K2n@`<3 z9*&2@p_J&Zn_(~ocbg~OZHsVqy9~npIE4~M-$c-L{<5|H+p5QGIHTonkIg^2*6PqVoK z0wM!45)yG(&vg@t2{E->ZqU0<^OWy(RYS~F8j02ZxkQYu`+WqMS_a<}ao(xc%+10r zjpfJ`-P|I5ApjJ}$xnKY-rb3~)G@-{*Fvg*TohPHmSQAYfE{vo?K5OLio2s=7E-dX zFpCHP5>YlkA_5XgDNIDn88a2(EJDN(;33N#g=p@k25I!gNLgV7*vmvT^vjNCW0UZMtB%`)}eXk zE=0mPx!dKmo;6GWYsW7W12`>P52Q(Hl^7+XhX$5eLy=>1WWOH)kS|irh*(qI7p05m zkN4K$7i;t$T+gp5`FRV$Udf8p7_grFdB?y~mWhCIJht(q{H{Opqwi{;`tBFM__M#- z;kEMXhw`?nKl%gb`qcf0hqw9pmIN}rFBTR)pAT~P49SM29%mu7T@XSn0vRYUOjA<< z02qAzgoj7I?JzQ7A_ygKvSrCiZZ_NDuaPgnyjyd=%l`|H%@&6p6tV5IPsYakn-_8A zdNFOs-P_)G`qJl)kDXpkuYT_4v$wTZFhL5pz8>z^SWjfo1tI|j*ea~S>#(2%kJ4{L zlt!vp9FA2gBJ>8ZF}-ciedL+rQ4c@UUwP@}!^Pp{>7{nupPru|hqgT%=Y89qZQAT* z;8OaysVpF+hUsLgO^Mh|Wnc%=-q$El2S&v7T9T&$I796K!GT!ZvkV-2?}ch^o{OS1 z7PG66WYB58&sEjTy7pllObrXGnj@rmh6#JK2rp9Kym)YOvK@x;IM1i2CvMui)mrCy zQa3X@I~(VR7b=E95wO{9TkFYlw7H+0oZNfk&GXZf&GzKs#e;DefCzxib-H8dDL%!xAFM7_l7b)V%lJ+MKV5fv3p}0!@`GC&b`py?0^?0wM0&G6=}QJ=|28 z*ukuK%r8waa52}2?iK(*K<3UYOB7%lVQK0Aa&+N+ zX9#yR%3^dDMnIOrKx*dRCUod7tz#JAU|>SL_RlOwNd|jf^R={^xvzm6N_+8wMPNkW zVlQ5UpcAS7I$koti4?+Q;XJH={~E+z7KHVmtwd)o7ZG6?1WX74$lCDEGtYkX2R`t% z|K}%fJO&@C;|s6Z%MatP{O6zehTnVo(LeZMx72_y4`vyD-?~}=BKw;Ib9Gv9E+C-H zv4Qk=16-#Y#rkj8A1o4#!v zTehfrmsNnk9UvG8xuV;)3R#_o`NrMhy&rx1)IRjdU*MNtzTaDaaPMK8?6{fd`Q&)) z$7ZLqmXS8w+FPlcVHlP!LPSvO2q`eJR5b+RG6RMnqGb(hpqpmr1}+*r$e|4KM+5YT zMD{VzC;-r@N06E|RUj5As@mqh+ns8k(jYbt)x4Wo?+O8o+%i#-F6p1)8QB% z!aUF2%!XR$)^FUp`RKvJT1E((=Q$k1RJ-+g4vSLj)H_^WnkjNsw?5BO3K0>|X0tu+ z_lM)*vD!p;g&9s}T6amE6X3Vy5GjP||GLCym9q{1v3g&SSScHfv)G>mK z#8TXt{$XYiDeNAzc8e%fkR=SXIU90bh9&_r1S!x4mKUH`+qFHN}a zX;ox|e0wl+c&IAoxnr8@y$DASr!3k7fF(ZD+zHUE5g-FH5u*^1h=fPi79M7?NZA*G zS`aPpHKk_?5Y?Cn2s7uCh>(+035TGSXC`LwP>pbBMkF386H^H$Byd6pmSXAw*i9)c zY*}L{#k9nT00LyhOlD3*K}+c)5el+K6yRlra`dnOAQa}3iwIJPFY5zEgqvm$B!nR# zaM)Vhp2jXn)m>VKlFdaxMEAst!LsJb11ZZNF_~dPOe<9cWUF_0Fw>&UOA+|G5Ud9d z;&q@KLN?&6M|mv&MOd({SVJHpV!b*dVl5U}X#)?Sbt55&Z~#sTJ;3J8uip0!Jp1AC zT~oREg8#zj^q+mUfBGk0efRG;@^+|L6R}z_E6ApvSOBfOdUD~xrGFtjRx3j+>D1Rw z<|UgTF|0-Ix=5tf2fPySsmNUEY*_Fg%-a(Ha+M?`F}`LcB|x?bP-3 zP#|`2qZm(c_2|({zy9k#^~n$Y(Dx{B(7mg3;RRF+4D^+ZS#LJ*L{2=lKd@NEd{MH6 zL;kNP6@=kLL4iV4#;QBt-8p~PH@_!fS3mXq>#w}Dzr2_ZN9)>KJM$Y&we63?hUSx< zY!i@X|~$0J5)#Nz{zFsCT4AD1%6V=4#73GD2Nd6$rUhG6$l< z!px-zIGDDuK%$%oCs%bkML2ud!d@S2#J3kf1nU<70j0Ox@vgn^hXFvF+f}+Vh+U2h~@`)<=*b`?bR2a=Py2p%i`_M#mg{# z3H0KyJv|Ac>FU8x{rUg;9uD99J@4bXE3!m_I}tf%I&?&&g*CGMCKj#&^Yq2YM~EwD z0O8r`8|Y!Gron(rrB>geHa@!<@A^Qckgx29mtTD8!Gnk0qVM-8&U0<^ZkV|l@G%a@ zX>&4++hM!g42sFY3QI)dJgM1G;nLFB1>G%rH^g8R76gdinmc4Z+T1%Ls#@ zMIeP|;xrPnhnk^CQMId!tFzNn?MjGMYS%0TF(RqM(C0P`6$uGtnx@Te8^z3Rn&y*w zy4h_G`@=?d`|03rWxJi{{ZMMt4&WG6$MNFoVmF)^Si8C^Qn%Z)mtTHV`le+huKR=BzX_w@iZv*>dNAZ?vQ#@$FP6spZj0SFf<({v~z2}AYXxt4Gk z>Tq>9vIvO~5E38fX}j5&dll+k$FZ_V*JkESJkJdPOC2nL3#*yArQ{*qQ2-&#vDCN+ zWZD!0h9R?=V!$wt)H!1*&7*ZyRh#G5x`h+vc|s7HYCCWb$8cw2L`***u^>u{ITRWo zBpFW3giDu8c&KYSR+$-*lfO6j!V(B(3XUbr%$N%Rim(W$?L225bK~F~@;nqEn8icW zumGW%h8d3FZf3#kh-QY_cBiiD$e0-!JtAC$Jxr1yAV9=!UXWoahs-9)0Lq>fN$du*&qP1GP*q=hzKc-0=Z)lEC2{BaW2b|9uUD4uul015f%|fOa_hs$eguP z%bA0?w9q8^zMk1`foSXS3)jhU3yrxj#Q?E-$dU<8*dPLsuW4l>Ft^m?Au&ii{PZVI z9$l7mIvjg%<7Sw@?Y-?Q(@{?Ez4D2F^5pm48n%yh+YnKhp{%&l0-Yo@gyDWIHHG!T zt-#e=E6PG?f3^k1Rln{C^FY^BZ3~9MA`l4o01N~s9>-zWOyem%{k}U?V|R1+(u;50 zd-IL?@aXE|f(p;aX?J?sn^VDI+Yg81xEsAgE3MR0$4Vv43<8PxIL+V|l|c;ykXgGX z0n=M|b1{wpH)o=5%?J_Ex)O1pEdt6|!oga1%N@L!numk9sS=5!LXft`B*$rDP8nz> zYGG@R9OE#!$2bnXHSJo5vfb@kYY=d9dIAW-GIg7$8G$aZE^a+`_wvzY*De+Ua-0t1 zW=q6GbaC-;v)LAs45N<-BEC8ti?H`BPz%+>0j2xIOl7DLz@^Od%vZOR4*- zeUSpZ5K>)rM8qIBz3Pun&dvds4(X6{DJ%oM5&%!Sp| zR6Se}@;d3NU6oepAObK`xVx#D2bcp3r9vtoAPm*J86r~{xZ32Co7WAvTI<~tI3PkK z*HG%hnU}-?z(p#u$K)BWY90szYo57#>zyDIsLx$dmN2JY&Y+$E zum}ucUL#E7diX?Q2}E}wk%X^YJH|nO`ynXuS8)t94@y3HU-#8u)hvVME=RR&vPr4m=B5To) zcCy=Uw&SSLg;*F7kb#9vp{wQ)z)6?`wOMgdjsy{!c~=dB)>D>hLY0RyPb~~uYaUjH z3dp^ySx70Zb?Y5TJm5GVkeG=2+=e>ztPJD|0EA7|bMTy7uT|;a&w64F?=$N3;6 zh|Gd!y$tm@btzT5vKXW|BS?EUc18|DZ^m2`>!1*DW1(=$1G)}_)Dm5hQOz(98A$ou zvfQewIj9?$+Y+3Kr3fPeqtBsTD|6Zi1Q~$bK~)i>w@zpXoOLeD%$dZH(u#0(C&H9( zrL0p;k&uwVB7NWp3>5A@H+4KRkS|rFh)y6J5N_VIGa!N@Gl2+EVQIE-rppP!2oYwH z9u*A9{U$5yGASapD`BxTWqCwEn;RiTfT;trxj|&w0OTo3i-Izc+_gn&^oVn1fQ(;2 zBnH=XWdR~%_Kasz%k_Y15eVT(0F=hMbkh+Kgjm;<90fqer81G5trY>l#7N|Bxqcv| zDj$;);iaQ&#jwMP7zr~YB9FK9ICvlhWVTD{Ueadpb&$h?Wkc?d3&yng;FhNV)4`iU z0t_cggeYv`f0s=MA{>_{%|w5e?o3$XCJ2czkeC?JE?KE8eY)GxmLYrpZ8zxHST^#ANn{{;fc7ZQ<|FSp=H2|dvwg}r8mamk;6b;yVH zh>vUVAJ^9kt``P`uTQR9e|`V}ILNR$z`P%ZSm9>m-?V-DBPzE|dyb_5Zf>;dakD-*A7v2%^ja7LnzlNWVORU{ zxZP2B*`CPht$OS6vx`S}-gxPa2X8){=ebSC07qu2GGF!aWSsVGyW5VJWqUGiwu2M` zh9#F9$y$e?6mVN;Yn=&^Nx)SXqBATI(9|i2m{pya=ibxu%j~WWK&>_6k(lP$MiDcZ zTOUX1X5L*&y}Z04;f>gkU8kuhl;5TqiKl)901Fc=kP2}mL<$c=R<(Q| zBOw9y-enYUOnFR1LQ97wS5+N`VMSaKk<1hw2#Ir!gftzKhlb^yK$xjNBo2tV z@p3Yy#2J67wjNldy(3c2+AJkuo&_R?SflWz_c=^$5yV5+p7!QMz!P0aDP#DOKO5=m zU4)CEssQ=U4n!V?F&lc94CH0>1dKo?cXiE%Jxi7}2YZh|TO)NNvT4J?bIA(`gkUCg zut zm=_T);i;RZWiv3Rig}*`hAS8Xc>sZ{!zyG+yn7KnW`MgbgfSH4VDARZYvp*do7wFL zh!hkAXv;ZH4jJLL%+f^JG?3>jA+6~7TO%{zl0do$CLvE@NXUGxHHSsANY@+yK;}|; zD7he_1BG9__=&%LdPlLqaC4j=9JlAt?DY8h@R|SDOK<a^(Fy$ixFOQKyJwi1rwRc zx*RX-to!t5G1}BZ?X3jV2w%~Z;2Ia;RgAnj7c>9y5SK;&Q z*6tT>?RYU#IR~6y`CNT9s?c<7vb+82;pXs7AAQ>o{BbO|JscUp7|}63=>XtJAsLW_ z#e)&8vuBnRQWdBO4XENM$eXQHIzQh%c7FS{S6_eS#n&EOJUkrs2sG|?2&QJ!zE6j~ z*$vaNZO={^V{bQv&G6 zlkJItiwFttFD~nLw1}>zY7nShv9M`yA@k^}rPR<;#!+3nDtLDf?aE|`*ycuSGZfd- zTIV7V$ixUCEWLHgK6IisH^R<>jGSe&kwdiucuv#lx6F?_SU4{E2?>dt0Wgx3>Y4#T zE(qDRq6P>-1SF!S;7d>3T1KLQ2!>JyS^)r415da-{ZQO{i#9_Tml4BF6@knYL5W#P zffPAu5V2WvQ(!>=hhTzG?`q(lEn|co7e|v55HMTb0eM~lh6RwPgF3Ix6iAp^YL74$ zkt*OK!OB??3C%2kn8M84++96u?>(G3)q~^>;$Z{f?s|ErPi>Uzy6%r;XVm%ZBh*+4A-Ir_@Vxk=A7cCA_0Oj{x zdd58hNN^S7L;$8vl-Bc@i97{Z2_6L?Q<%qfG6pOHOI-JfRn?b&iV&IUn&Sjv^1mKS z0ujYxDO+Xru<*8oNI^j2Jb$TPe4a=2t9jm9xrwJR{L(+axOw}eD{MdYd(nxm+B-^5shssBBnz8#|9M9giD<+hSB2a4c8juEhvZETL{xW6o0ZI@Rp1)abHwu6!lvK_bM>FL=^ufF!i8*f}* zTwOi7taSvS-ezs4E#@mdUiCVbx%F|ZWiv!@U;t8Us@fMRfjbdcpwEU#ss@DGU6_H$ z0nE+RAiDx`*Np541MMcI)H;&GP{tsb=;BDP#v)yic)Je^U zS}z}6w$_{K$!>c*&Znn09zJ+53}d3z2O@2s?q-UN$t}7qW~&I7GN^V4f|8RK zA)-iy{Ji%tHIE=-cXzXyrcUM_fq5t(Mwlreh={o%05F(!x4x$AET4E^GT6biTjo$A zk`y8o=E%{YB6qJfHqf64X^&% znLc>qlaJ2N=;GeIJ>RN#Zyg8&7`$u9bPV+th~s%W8}WGbpeSbLIBj;&sc&~QY=F_v zij3smtna}>z&5}68~E#=J$~Z@-~^P!s&3T(Cry-j-9 z_hB;}5AEdUZfK4OQnF3^EtyB+qG}Q0Oz04yPE?3Vo0U>nO6%snN=6ZhXr4PE60*C6 zn?jgc9k!(oZJtegM;KTT7$BKsZQUebnr1UK(=gwi><-5RW;mGn<>kdVj;(8-)dNpY zZ#;N-Pf#}}+t!E-2BDMCdE`8XY0>$QyTj!fDt0(#fo=~bhAhL`P!!ttDJzIt#!Z9-hh};n(fvAY<2a##G9)L~= zrWOdqAf{o_BSIL1f+;ePqSRVM0a~1AJL8Qj=ofTr&R;SSTUAJkHE55t*f5 z4B(pgUFiE9hTpmy00UAzLXs!kGDAZI5qYd8-hhQ%`8otXsa>E&RD%oRk|D>mFxDw{ z%xWiwDy={KRD1Q8X}*jG)9d%o-gS;=LO0?3Y5vluAK@8(>z{gW+2}v`v(LZq=6|jH z)8F|Ae*cZX3T@Ls~aI_5iusniAv9mnH71ddxo#p(F^)5)q!(sx6_2ODD0YDE2 zkBG#xhuL%m~HKRGG=2s#@N5y6vlrMv&t&mTYY1uIAVgCDv>atUw` z899h*jzENg1hE9Y10ji`6M<4N_%N37#^%=TTZgy%x7?G_T zA>7)W?{?esv$ONFTQ9%z%H`#wHn#&nVE4q?z2V3%tY#Rn7W#GBeK9K zr5>)XgxJA1n{8_?AdrO6iNyU_h3D2ps#^?5k1ifYK-YN~Mn@TjIt&Aq^6>rx2spcW zKF!CAM_1dE697a)HBEO9c$gXzl%X_LCMIS=8tRz#w9U9_^GwXmT6hfO01iW~i9<6> zVF~wauO;F(wajY)ggR7rFGW(XM~rMFM7_0AM|Wr9Oy2fv`UW5o3V;AJm0FNU(}I+e zJVZbYcaP3UfE3<690rPfY0NyFQIL?cRKVBO*TY>Sf{0RGgG)$#aG~gy`N08^1wI}L zVN*H*iD~H#3ZsP?M8q6kJ;DiTxo=dNWl`=!y4&-dObW!@or#Fp4fCFGx6D=Z#hjnw zzeV|xQE?dPIqd=jf~z5=ctVH~62|yC4`{?9rCN+N>8}e6H9%yc@JJtec43$qBIe1M zVnK6H-KFOpZ(}>`{)n-dw(Y61Tz;uf|iRWAKe0q ztqj5Sv%f~J#Uj^QU#VqmSp`AK1?Qx&=mr1-*eQZ3?0Em;^{>77$)Dc8_!)lq>Zt0+ zD;+=^@tv}HinrC&<|?33H#f*EIP23H0i%NtXWouYCq)cnl0j_X;uwUZ(0(7>0+G4Y z*N!KD>lY9I)62&%ykND+2TpEn@4n4>Z`0Rk7#Y|zw-pDVJQf@3lanpqWA7*6EhPLy7#7OMeM3} za0YVh=1xdsEmLpi!7L(We|5FloJMe)I|!9hr>4_!VrDhVqOmfRskJuEwU$!K)cRq6 zg~(JykF)i**>2VQJRgaLnJ*qaC}kj|{r<4T7)v^Jad*0#j&t3NYMO8R!V-mx)Nt!a z(>#rvq4hqDn?t*r<{5zMunDBhlZi!RgAr!UH^Vj{)U+fqXsb^VLt8hlDCpfI3SXKw1cMTLrM)_8pAVHg=j%pyBP)nEeagdE`{gTRju`A;e@pQL&%4b#Z}A*5X`(t z1XUxPxkR>zc?2d1?o8R@i+QCZWJZt&AZDD5M{A8)mXCJo5&{5`MBGB8EC?&m`lBy` zy5+;iVOc?t@Pw(MaDuvvM{J3MT#_0xzA6Vi%F@J0>d{t+ zVjWOd0o&qUwJ@|;(m2rF#PikiCH)`K-SU`EweDgJSi*x40xYLw&Ugk|v-lUXl!(9~ zJlnP-!lf2YJh=$v1)fRM+A|F_y`CP3VQvA)SeQi$F(w8U?oKGMbpKkntc}Sf1&MsA zIB+6Bpmh<7Yn4%+&&-^rQ&>4(OjT$Ako(fg1Zdz{SDeqL2NEDHIce@G?2koL00GEm zM$C{Pk!PC!MD3;drJuzIUp(F7Amw77Z+zfRd1~~pUd;D>ce;D#8*qGVb9wL5@5i`p zH|zM~oA>2aec=~Acl_aBtIvHilo1@=d7ajMc{#2Vb-wO@*AR-OYz5Y!itAhAS}KS6 zcEM!6F%W^=+oRWC{^|>#`b2;EljZQr@xhxn#txb#DhE6*Wh4-z0dRnA1tJs+kWRrs zPF2DbTEOhbE2Tgsa}6qF5!S*K`okE902r>|=H}$~pZ}-(|L;FLeD-x>Fqq@Xn`ieP z-lx->G(Qr)07LRyBpV1YK0(|96MM}J^9V&$gv<++;2{881lN#gXT$Nv*{kz|tDpTJ z=eqgsc|eT_k2W8Nkxx#BdB!K7xwAdpz3|ejue|iyy?bx8eq^q$6) z9P3ca$m38+z}1Pk_XQON07lMax4BI$B}Kt%+3uo&L{wA(Ot-s|5l>7cT(uZD)H2L{ zHuspDt0GaUb-K8yLp5_&66Q$*3Pr?F$Nl~wg7a~fQrrWP!L2tPN7-&pIyV3a4>FZn z=Hu~joU6HT33Dmp+L0Kb>8!0Z0<>nPI=49hScJMp2HqjLdFu@c`=p8Qs=2ALFanty zA`)}!9T8aw2qKKBlp0J#BrXU}B z7&wG$?~wCv9db$*DLHv}ZRQ5xwQgX|mC8{U0RvH_81y91F+n*r03>F1@7j?uM+;s9 zt^;hvQ7kRW5RSy*#v+jDHi2n}1%xp|0$M!p$x(YiLN^h(dac6Avo#kXToqEgxXyOC z^g%%q+)NoP@sH7w{5!cwZ9Jb2y#tHcN2+7VVs+4YT)8UtT_12*Z!YhV89zh)P&(@Vek z^asn`Z-4sLFT8YmV{n-rQTv{V+EqhwATa{33>Fp!Zj@o2-Jv-Rg$TokjHF1zYcCHr7oU z>h^57d24s~?#-_}zkA`umk#@bhB$^q?ei=my~WgQ7<9YcaKY`?%E-*f3@jyMbeVWf zcbKF|Yb{lPOz0NG9A>e0&bN8iMG($zGXW!#%{>L5c_j6&uz@-brp+A)Q3e^t!PR>= zL_EK7>*CSFjHz=C)mCa9H`@s7t(!ZT)p66>eB2*)XJ>GEIZsVa1~ns;M~@z!ou9Lm zQfdUax|EWIJC1QY9wD&X42aCaQo5>ZY_}&=n2R`g$Q@=Za_kr*aHZVX$lrd0%i#4u0)(P2@(`x_v}l- zC9gMvnHO9Tud54@gxp<3Ty4ca7CTOad!%#U09>-b2_RshD>5l(+y3$j>UQ@{kJBk#eERVEXXfqOij0T* zZ^ZMT(XV~An~aD13LW2gaP`gnr47{_w4CE`5*uIkN@zuZ_m#E{@?n^|KN}R-@oJg|LzCh zhadgO?t@Rg^7Nh0Jp0_^cOIwBV^2UCyq+sQ*5Hh3OT>m75(3`_1;XUe2_8c1&96eI zc6l++V%YW%UcYtoZIS3516Q$Tj#?`AZa40plx^LfZErkw^M$XzaPRdur|IBXr{EqQ zs-$yRw^GYI_i70+FjPi!Xk#GGTKnIlrV zb_qy?nOIE$!mXPvlD0)*LKtQuLPD6V7z2|9IunJ1V-PbV5b}}_3SsW46kn*(a25t| zMhXCtlKRFBGNT--v&NAVXmZAa#Egi6mig`OND!W=Glgkzt^$q>E7Tmgj$VPDq5ZIe zM@iigF+>6i>1r~#zD+peZ`Q<@1=)v413jX-Lvr8Y32){6no0Z1w@)vFM?}z~tzQI< zo^POKfk+JtFs#FLQoCjeE}3U_QkI7#7Eh2l{1HeIzK|6mXzl`lEW|{4%?dLBBsC<3 zBf`|pHF0!6B<9tJ2E@GNp(hWW)yqT+1Chr#(GryZRxBeVK9jR>E}Lq;UZ^NVFpx@7cm0w{4S{)ZhSPJ9m}MHhQR+&GfY4pjjY5*OrVZ`2c=Ve%eF@+`-5Qyy`&6Gi z?T3jrr9Xds`4bN&r`JArJiIZ#@k%^6z@x^SO@mTz3d@#i;b$H{y?H8+UU+GL|G`&( zLo5E0Y=#a3D1E37m9axx0 zLI9lt+?mm{+&MVrelnDPG4CBnwh!9*7hmH4{^u_~{S|xt5*6C{u=)Kz{$u~)pZNFR z{hoJ&oBQGWf8US1^Dq6~&-}(0e)&`VH@=FeJN<^o;Db+n?t{#7=<{ZNBGocq0u2;di9kD_g+6cJ%9V#-U;YkZM)fMbV4G;)*Ati zo6R)C{&3h1BN4UMq|~{08AeratrP3i=B(~P!p*pCy%U$?agQW!Htcr$iwoxB82hWs zTDSYlt6>;P$UI#8fexis?cSzVHv>2v=V|V3kU>NOqE8(F>sXJ+iI9*9B3kd{lqHGT zJf-HUN=)Vs#9?`Ir7#g#1b_k!5J<$j1+EEy5oQJsM67B#rZSNbt)pJJ8CS^+=Zr#O zqP1O@@_bBWgNPm60o<}n5CPD#Gu#|-$vOiBbI0CFDG6?SfG|6Sxe^jHxtW?~1#tul zfdQf|^1)^0&P+h})Dz~=nfHoi8}Rk<>dV>1BDe%6z>?(l7R#8wM#QA$62@PCGjFXV zN#BxrEbQ$Yw5|5#04kaPkeMR@*p!tD_bYI)6M zh;cq8?ur16L9PNCeuaA9FF#9{zsjX~nPG?s#V`>?iTz8jA6`F(8XFmylQY1xZ-&6(Tl%w z^IULq>+-dG!`&LiBfuQp1ucLj=cu)20h|IuF#^C4&CNUn(IL29cCzS`*syEu#;<%v z{)@l==2xy@3P2urgMa(CeaoNvPyfR^cb_m2cK{oPlUslNZ~n#K^Sl4hm%s4*<-_@< z*AHL#TK(By(GACq)ArG4%D29!eb>ice#d+7k9SYYS@$!HC@7=0?W9JdVI2B#ZjYwJ z#l@RnInEF0;%k==^mwOF;25CCi~X<>Ml8Z^4me+3&YRt4vmLp>Q=2=drzf{=-+KP} z7hZq$4QowgKtzKUPV+PYk#?RA?Qk`p-?+hLu7lS>Tumx_pf!`i5vZ;N#KP`w-Q60C zP$!45h<MK`Qm#4csXQwAjWtygl@GvQihz_BaQ=X`_fX^H?W?4CJH$U?ZL z2K3%7LRJ9>L^Sn9ACj0kv8KBs90`$^>@#x8n)*^o=Ds=Ns^5X|TsAz2%rr;XM4YTS z6NYJkQ02tZBk~_Q0s~=Kq}DIT-)pHMtk^RmrOPB)3>IM~fB=j9MvjiFh9&=Hs$Gc| zdOm0DWIYg;pv=Wnhf4)YxG&aLzzl=~h%iHzKyWuij-{WEA{-@EQRy!rK!_v=03uv8 z4AiLB)Xg{`S`Y>TCmJn6;929mRQJ`Pu&{?S^Ah-sP^2W&PPmwrQ)`tsphr-8k`wAq zl~&TGS$_buChCN#qOjxzj)B=QnbTXOXf_zY5rr5syE+VPVFkd$0uY0Q5j*o0^w+Sx z1~IX}j@$$1WI=kHG4^mZhuh}7jvpLPpB>_2+MEu4Kgu2HM|=1sy?o8P3Zp!H4X!RC z438H*ns2$2V^{5EsHha)8Ui8*3~I6WIJWJ$xqNsD9t{Yw+jeLH7J&m>aV}AI#XYJZ z*TNzYUbmICOEHNq_Hfv8s2bZaP}!Ck=G`-!^3+Jjsa?fpQ@kyxTVOaiqPuEpl-xo1ea%YvDQ!s?CvpUj z{)dMj|8V=R58e96yLI=}<@Tgcg<*T@rGhG79*++wOs+2c@`dTm*M?WV4E>42JY9@C zEMtwvZ8}0NL_xyHI1bXa2Y@y$QqOJ;?;hX&_+vL-_}c4V`|4NkKX|AaT!pL}9?)hb z#@@QwMcoX7)3~Xn3bkHF$=(SM_i$lW^*(8s0m3NaOEHu0ucpIc?g9I0I!x2q`FWUn z05gJN5t-&035816xeQg+hH=15PGvUh%m4`U+=vS^r(wOf)@Nm5l5#v;A<5xt4}dHZ z=`V{ujGM#ZSO#H{=#8ZuulC3&wW=yP5OJ+?JRZ$aMD~XZCQ&sO23YL%#FQ-JG|ijs z#>~2PWNK|@2Skc+VP=+CLM|bbfOB0A%mNo(Kx(%vxrL>a+EFAREJFj`k;rTvq9KZ8 zRGD*nod^jRabDJSg=fkXMA(uZmEsKdfFL9fAZ7$mH9~_xRa>l^%Q+T^AR=8mWCX*t zTACMoXu|&<1g0LD1-+Cud7!&87f<040AeB^0T4;NuAE}5YMZRfMM@bI0xVvnmG0wZ zMIa{aGh|fEY7J$^w93aK3R>0&hopQh$)wabW(-E2tFWv@v~Y<@=VqXp2jF!U8H9tI zCwb_uOpJhOP0k2k!X-O1-g@}pZW88FlES7`^n{uAKm@6rU_KW?KoW8cW(tg~WJ(>U zMey=C7td2fxwFB_yXPgj>`*Q!5fQd5 zE*uV_2#Da!fWEJ#k>9iZ^8|0AD`CamiN_F#SRznmBUGy&E(r|!%$51EGd~m{k71tL zOq;m<&Eu^Jr#F=dpOPEeSohlRTkl{;w|%>OV1RQwnsqx^5EnPPxKi1UhGbRdW-Q{~ zw!5l!tYZcCQYO=>5a6Nr<18aZC>8A1je^*4K!wmY9cJ5X#Tl*C``rnon{HnmWRT6B z^8lFt|787n&}~_E7Y43r?{n_G-|)tKnU$H9S(QnZRHX?CBqm8f8#%DuY9@og0^0&J z2oqq2w%i2Rjj+K3(AXgCa7PmcV4uYd4f%V}^gj%UuP05Bdsynlosd|G7 z$Vh_MZXK--#;2dY_ST!XZ@=^2$&+(TnMD#ysp{6uX}8meOIwyD=ae#K&BH3`QiVl? zt2XSDle#;MK%9s&5!L2q22n`Tv^KA$B}PK7*37(B8?rRhaJ{+XZo37N-S%R`hqann zWn>Zpl3^U;Ask>Fhk2P5gK1-PqaFz0OzdU^On}Q$;=@kJfjF1B0LRHd{nT`C(F?y? zEz`0r4WOs+rZkvV5lLA?ZqGshMA`r$=d7)1GiI}p1Df?zO{5<24WWDo3>vU!7wlCi zVKdUGts)KT)|?O{T-(tAj779H5!TiKur&=%IC^9wO<&C&9k@Gn2nd0eT8NmL)YLf` z0(WyKa3eC6GZC(AOcC>jZD>iZwCqjmmH|`dmev>yIvDwUpKuB3=5*$`>z5+ zEU92>YT)2T(V~odalH4MZokBX2pK3i8`#Ur%{*X8Add^i)H>O~AmC7|nt~*@VhA4C zPJ|6Jck`ipYuZ?N7zb~zpqvmWZZ*6V!^UCXAH#b-d`tw0oxKGBVrJ&fD{%6rxJP(G zy5k1GdreUQTX5;ygZHby`V4{yj#ecZ5`Y)kBszJu-TO4wJES|wi!IG+n2!kskW94! z8E{2wK#mALO)dc7N=8=)oSK)W;B=4<57vNa>Hq?bL7g&Kf!0>@u6k`3k0x(;@n~Ak z?BYprqtm&hRbDQpraJ1-ieVbfs!2grL2#Y0kPM6~UdnDo>2or2t!VB|;eG!(a8~ zANqwK{Vl)uw?DrB=<$QckKev?_wIY2{LJTn^q>9QyARKwoXk&l)91gi{Npch`WgS~ z>&t)qv9(@rKXX?e-pPhdr{jG6hSR|ZKK`LAPd&eTvdverJEk!qb2bNcASaGM0(9sU zmYOPf)d~r20JlI$zde8T=-T?)^($|@@%F>}XG>{Ff_sd$)@o`%P%7o2NXx0#v8`5P zvSc|CXz1X;083qRsj7zPwb^c(OKsikLmb)VgdA=cbI&;&c&i%BT+Vr!ms(052GyF9 z1OZFLk~$Fv;Hv6q=NA`;n+>IOetzy|tAhhwyzVAdjashOG-U|@p|rxn9x-POs@1{K zSzR+>N~z3?8z8b-MIv|0Ih(73p{X+(xPhxSi*_b=aF6;LWSOR29;8(T0<8wrX-Nl! zPCNn;2jL0fW9mV`z|4U^BN7lYg~GBU6dacoIWxCf+?@qOYZ62SfD^OT8caeO2UiFc ze2{#q&A>s!>4c`u01b@6BLNiljd?+Vf}0RW`2engsy7c z0kv1mcNI-<5ANB-?ruiiTNNiA^tAf@VGX@lDxOqIm4 zl)6v=23=rHwS|8oei^neMDZSK5I@o&fG+YVpXnje9cF>OL^Ccs0AvPj4rpewEHyD1 zp}O@Y1OZ`Bp9Ja#!7!mPyP0F~)D(_w5(MYq7lUeccZG%;fE4tfiq6=pn!*&#%mC=> zNKq^ULgL^Um6Tmfe_036e>W5!GeiXoyB$NLa?kI-Rs1w1ZMw|U9e?x|!DDL|oZQ;Z zcC)E50RRIr5$mkzkVaxbOa#mzgo8T)h$5f}dsTu`tW}%Sn6-eb6QP^7;>bzOV8nDF zSFWxl!?lvFfi4vY&hE}oRVUkR>vFQxGhXIhQ!6Ln)LcLtEGRP}i%+E--WcqR+3D~g zEsZYD&1&=Nn^9O1s!l?f00BlqG)hQoWYvZYhil?wO%-R{owc3AF1(H6Aj%o5+prcz zu#Kh>VUEl+uY-J=_qnDe-*6MXKqFMQwM{QvyHKm3PP zsVoz@@t7QJsg0@-^Q~LY+Qh?kHC=(*10tzO{fG~`Cd$G%^ zfUeb3WB&^kr4-UXV)et<7tJVsjF-rJjrcxse*xiSe!#bPNP+FykV8`>~fJ0&uB6c+eBZ6oNjA!Ylh``A1p_g|@ zaJ630h=3$b6$0T1FV*{LyzbzH(3A54hyv@6a5~efy#=fDZ{}`H34&w>Q#CbL&`=)% zLb%`@8}=R-io_kzUUF+{P1O;Cr49!J20Dd=&=nDW?_+8jYc30lDMfdRuoN1Nyv$j_4viH?q+0BA|%!`I{V^ovpSeg?DV}0Gr4~s zU;W&?wez6$TZ@( zVnadzC0`#Ru!4JnrdR~sz@1@Sw|S-~?_8`7hrCJu=tmyjd7>Zt(Dnc6Z~Te-=fm&% zzy7K7Y1-VpdUXBz7v6a7{{8pPPEG*n2fpw7fA8=4PTs6`C+C~>=#I@5MF-}wB!yO|I@zjL?!zz@Ik5B~9A{ro51JUwa4vNLbs zSc+P0oLG`15p#?1SqBG2HEp$ua0OGOyvm?E6AR&8p`PUy94YqdO+j5G|%p=ZvRTC0l0Wmf_aCw3xm=wWl5g$V&b zgd=acmKxG{WYAj89Edm#trZ52QVxv>6OCbwg=K1mh_zPXR9j0q31e%@oaSlA$UqSN zHpObM2u32Igc22rj<8;D=6OLDGcUFEyaX0#ORH^Ijl(ds+L~z|N3$g-DXs4J07oWd zoafoiH5y(+I?z*&9WKxAE=Am{J9_Pd2I%4Htu>4>F8ENQ4pN20#h|J}K=1@?q#Va- zAVvGw6ZgK@Uk=y-^!q;EEA;f;6$VXJBnDjrbT`GwdQpSqj^ND<(Y3i7Nz|$LlfpIHwW2shY0Sd7GC8b$t{v>I)Kyln%(IY6aXTcX((?9IWC4?vk7}wQg^n+Kup$@ zQy@-JDI7gCfDlv(n1y!O0l?I{swhm?=w=@D0`@SpaO}o*0(}JN;_oiF4cy$!dLa*V zojEbdGL;CUPf45`0GcW>xm!x&;H?&BK}JVILp80Hz>T7#gAj>QLL_#F=zL_6z!sT> zm^$ZxVPo49InYtCP;R+db7MB}NNI9x!59--+;$PwU6CX*937od(Rryd%U8bh>Zj>+ zHv;TTnGugxX-EmdN=d`$r7~ayIzb|!0G9!kfuL4(Ba4!q;!J=T!GkP*VcrYVzY> zeCy5g`sw@2(?{urYwhv2+`Kt#>y)!YODk$eM_MY639e)=+xqk&qqakbQs?8f93N=P zaIm3agi%aaISb+d0?5*=LK>uDE(@*P+DX$zb|=$?AARAo@MG@|E$dhR;+JTA@!D|w zz5n=swqla91C>@j^O;ZnzVG-GufG0;w_bho@!8qcafQMn$*eg#fvL9e9hxDdy8)V} zoZfxsv;W?={Rcn$xyLl>$-S5k9jzp=pMT|ZKl0;0_2SVlPjB;)cu?OV^fv1KELhFL+O;PqorIW^R*M@YG?VV= zy+MQ`>&<&oFKRyko#9e$86<-vhLp4Ci3WIp1RQ*A$d_6-1wlu{dz*W2vfH5UKwb+?zpW zb4O^V{bUb}NmVbq1;WLR2H?#hvbdnf3533@3rFLx13`)At$n;Qp+T=yK_o^5Z-Rir zgi%cp@6jH0Z`KgNksOqPjpCOdzf}W^Tscp|L>vfzL^UxH0&)@rVB*kVaZlehv@msH zXMh2_3oiB}aBu>POaW9-Vql{EZO3jFX?z?(fas|F{IB};Kly$C`0gif-@3UP5Y8U$ z#;ZE6d9x8!y>fFsuGdRZZ#HHc2L*B#auFE`xWPfr1F=FjvAoWLpynCe3>$zagbYS( z;9Rk+a}r-OmE@vF0^7k~6$ zz5baeX}ErLdjHOHuJ@~)Pdr={F>GGlp*9}|7X)_|axgA7j|oBHV9cN{MAhNS3fF8` zGale_mF?ys9l0_x1KEKK<aVOpoQQvh&vV>!!#|+DrZU(2!^WVAvg6TS}Lc6#OAij(yCi)z=?@f6#?f`@@kcb zT42@y>Wc zQ#CbHgAQUi0y!uX@3{+f@0hncwzw_KB2%GD52^dqy1OcfScEuX5E=T&9><&mqV1de z;wm!_+=KQaPmBQTxIsb+k4`<*ji{SS;QfIX`tt+=G_%0UGzj&0l&_XpEW(DDrAy~lQ$$v9>r z4rRTBS=T)!c0@Ntj@W-7B1g|Dg-D4-925|dF-aonPz@nP8e_c42xuO9TMDCqw@`l) z1{l=+AHjmKki?7KHwOWtiwF^Re9e#~RJd`Q7%+KjL^r?wcmK)n`49ilcxS$HV^eme z+*@>MoMf5W!L_+-CcdZ_lGZ~SjMM<%xV_uWz8?AM8|&x3;>D*wbnBUqTs=72Afx2Lih?xE z56*AV2A=!k$=`eL{6uX6$i)#97oas97Ck{=11pYVT+B$_1)ExRt%`0qshc(tZf29Q zscnWd0Om^mHXN?~s-&YNN2{8Ly1pi#f4gpAeb27`i?>gvou5w2&gu&mhEAgbb*<56J0pD~f~~ z(U{FyIBKa{1TI4i#gSKlfFba7?=eCUO(Zc#V`yg79WC7HabYAOCW`2sUMh(0Q6$B* zkJv=;-kCy7!4ijV1(6)}@+?MXv>;K4d^t4hwHt^xC$6CiMW z_03p_Bw8aWFh^!K>g{N5>V$1CtmUY|0kdiWo>J$&u@fu??m%fzt@r$vlpI01HZuqMOgromo~t|I?rS#7}(&UpUls){MX@Nw=iByJ>T?)_`cW zNgr6Sj5e0DW#M=jL4*m%~O%g(=?@&N~!J( z5~nn_Nbyq#;m`=yQXEiA&6(WPU0JfKmR8rpSWB%-S*u|*439w~8aw5r+B_`0(A-UHBbI$%6htTwA`xc{-)}!zfH+WC0`p$m5)uxNZ*0t( z(3P6beIO1*B6@aWl6E(DHA6y*N>>C2FjqG>^}U%Y(r?_maW}@%AU-JobY||pA|epz z%`Rr>>>Prt{isb8kK*q~1OpPFAriV>9!0^SfW5WWbVm;qcp z8VUdqLX<6%2tk_*JFhp-e&tua__bdH1kCu%hXtWRnU?MD^xoTl=gY z$AbjffdIrb%mxIrNPa?S|x4$G*m@Z6HaBG z)Vxd+5+jkD67f#!dGGdvci+Bu@7{xH zS5sz3iS{r80-#o#dy5>m%B@s4Foi}WoK_y3bIPjKAq-P!u9C*qN|H3~W+DROd6`z@ z%FKkhwkj;d0^r)3h-m8?X+|iuv}VM@?o6~SwUj0-O;tGU1?Vm1k=z(bL|SXZYG9#S zi%5!R*_x5Kkp+n=%%*lJm?I(wj0J^+%#>J+ID|U!t0NM#fE1vq0fk&$Rh2|SPUrv} zBQO9Edb3E@M-E}7cRf6SxdyVbKg#2$MKKoi!8n|v4zSN;c58tBbRgKb`-TwFqOutF z7Y>>kLpR5Urkt_o!^eryu_^#_6-0~tpAgS?F*#`L0rAZCgRqC*G~zq^kMe+RqOc45 zkB9e__~ss|GXb$sAVh$nZ3;SF0fmUkHArS~a}w^szG z*CuoCprW2BVW7T`W=6nJZT0Hr{WcUuX4aKC5kg1iAQUq;U@PXNz@TPc&4sbFP~d?2 z{x|2q$VA|%wgi#QQQmA8t`h(-bEC+gVIXXv2{3NVE;5A>+s3uk0WzTA$}t4A1bZcD z|Jz`O<{G~V(+Grc0|zxgRxnAq8CXRb)}ZXh2qt{IKJqJ9U;JHv>bZaU>HqM~Pka^; zK?DGpiGX5gVP-}KaDw(Nzw+N$rF1r(F3YmJ*v(qYu2pZ##oV;ivXoi?p?T#9-882} z)t5W(-MRV9b7%+V4(Ooh7MK&d0eFPt(NgPX%>V8m_#J=efBi@2Po4mzWw{XISiA^S zSb);?&6R)i*Zj&afA;Es`&a&|AKKsl;lFt8g_n-U>u6N!Y~*S-m*w7j_wK!O@8^H^ z)d!CreCiWFf9IXstL$rPS4L?&J-qSEgU>#3IC=Wo@##C~QZvH5I$Gye($V_L^(&YK zkuhaLac@9QW{3jd0F_9_%@H6ov8i>I=6zh#6%f(b?C!}U00{1DlZIO#c=6ty*QRNT z+#Ux-z%oyaEFzIzWC~*%N-Nr$p=r};xAbp>TF%2VM>;>PH)}wQ!I_B1)zDhAW+I+a zvSxC)4&fdpW~Ql34zNC2ZLVFt_RPTxFF$?v-N$dfcKiOl$B$2U?nH>3q)b)SQBZ4j zq}J3yJOoaJNhCgffF368P;&$t%Ph?liAt#{K^k(YHG-|Ig&T&=8akDw=5ZAC)+({o z7RSArVK~mnHAF#b3T`Q9WKnIgZ8cNXW(cg#ERY;55>|9xs$@X`Vm5O?RW)~I24HeC zQ&Uqkl$2U+fwlwDrL-oT0*H*LZieIt)U>)Ov(y${&(y(p^*Hx|xRZ_h5gjR{-Q?;V z9)9l?c;3aOzCTnMY42k~aO|8Saxb1lGa?2B?L!SEhtDNNBP?C z`2F8rPp2oRj{t33y*6t_t?Im6>Qr{y?Zw5#GGDxR|L)n@>BIN#UF>#Xa52w+?R)iPr0M?fQ!!`%3zzUlU(K z^}2m>|L0F0zH#g7+4^*M_UadZ_@8{{U_JP3b1B%aDC|CZ{ps`Vo%NN~m8-HEhZ=*0 zDxevL&;nbXvC`qS!^6Ymt<}1OTWh+J?+&0HXHv7?XcBlfx^NH@ z(AN@o=bkUd0Z5y9lxwZu?R;{Eo0w1P}?MYE*dS~FK>c2g2WqE?NC5KYYyskSALqp6vJn?gJT zBtl|gA{60Bla45lC~4s&J;)on;SM|6Pu|m0BcPZ9stcNryDyqBes#T+&N)1Wp^7DR zi`B*{C38i0Nh2C~X-I&CQEir>0HpT#{=2W;J(Ri-t=evyT5BITeSW)a@4SBJ^;h4V+xGFr?Z5Ds|IW|e ze&f6U%m3#K*FPvZ5j#WECI|_L(PP{qCI`@D{%?QVula$${x`qy=G(-wTXs1QD>p~>IXmg zL0OHUb}v)shZVR z>pWF&7O7`V=%#Bk!#2?2A8-g@JV1hwkVf#1dsScp zN5qgkMLx3871tkh=BjZcnjt$DPpC0!6`|^Gv3S zJ)|L8LJ&Bjq2q;7~V z0G?8gJCjjzmMEVD2Qy`1H_prT=Rdw4Kc~6J48olxE?iRP2sWCDOqau+28Um+8)`|%tIulDa zU(UA6!``(W>X*Iz(g&_R z>)afCwOLKuMbWiZ1ygSTD#Dw!h^*HKtE%?g2R`(|OCJMk2OE9mv!8tXl}Eqx-}&QT z|0_TId%x{>yzt^nl-8OL5g4%%fSH&zB&+Js_~nnh{NMfM|Khj&ra$y#dNiOQp*0m2 zBvf@Xo42ii9`eDz_J8@-rKYJCAtECqV8=behtV5m76S9u%nVuR`t#3yef>a zPamJvba39e#dYBr+@bc?>>458aTjn zFTXICWqYwJZL!jVj@zE^w5hwtq}<^GH%4h-^R%#Vd?adX^Sr2O&I5qAxkx5tas*C- z>aCTO1|TP406#c7Eb{`8<9uAEDjA=C=K77BS8m?A`hjO}z5T|W_io=iKX0|EmZdgj z84zl;IL*_AVj`4rOs32R!cDJ6Anri6(5PV-h8GDWkUfd_QJoU~PutY(sk2y1fyPbn?)fp7Uc4VA>E|FVPPGHH|)K z3~hPX=LjQjCLj|7jT5s2C}sfI%&ZwnKv57C#67Jd@_O8}5I6=$0V9T*0N{wQw!obO+sFMT*L z)3|A%zogDBL@*J`YPG7%V(y8=+?Tlm7%_lxY zW)k#ffMIM0;UtM`*}eJMH-7q`{4Xab{&WBGQ?H)RuYTdgVO(6XH3uP1L?49mlUJ^+ z>e5uTmbStC;!D54y{gN+J2SVYs;I!AwW?J~2~8cWl%mz#aZLG{XRhzgFNFOYf5|sq zyK*qW&C`rLX+h#|}UGp=ZDP8@}b~XI|c{H=NeBDLZ}r zzxFHs_;>xGKmMowi$$Niq1?A-TJukyCs^;=VMX z-lmBjpA7bF+CKheU;dr{@wa{Y$N!aF9K7`0)mLBJt)JAXF7vi6y!pmo@*O|)cYo~X zKKc6n2XB1n!ykO{fBK_VCkAv-26*YiUzUcU)>2BVyD3SoOAQx$ zS(H&~nd93+L`L4GIY~k=BF;I_(}eDVT<0Z?2?)&4)S8*9rJO8mj2NN;3im5Akb;`! z%mBXIo=HyEuCEV{$Llu^ZrnP$^UiyZpInrp+ud~f>X~=8UmQwieRfrL()iw?* z1T4$Kj49>PYO4)Wc#w=!(%Pyi6O$uFyA~J;dEou-s*3Ej0t>q;OC}={QSIj_k*GH^ z3t3*;kE$)N70j(cgm0U@{|N(9x1EDDgiV8wgANtfIsgZ3Pv7__4{ zuy#!UIA3;k!4o zd6zVW1PRcI`YN;kzxV$HxKCMdcQ92%iW;?O80hA)h%Jg%NDS0H;vyoNJF*p=q@y6Q zgrG10?n&by4PftJ!~I?rw@`p`T^iHjeZZbf+HYF~2jmb@c3uL5Er~9zh`j6CS(ItJ z>qgoTLu{NAl$J7+ zBq9IeXFmIv{`3F(_7@)By|bN**IE6L4)UR~9;i32wY8ec8}I#~3r)KnGY=`ZrU|na zc>DIf&GF%Od%kLgnblj)sg&wy5PX1xn@&?5$Mtr*bAY8Rd@weWhv!8GfrF>kR}X*T zR~(+5-1y)Bx9|PTCx80ygA+H^?|J@1hrjCUKmJ{R=FdO#!Dn|fubF?_@A*xyeC8AX z^WXZR>KD?)qDvD@TnPAEe%UwuslWVRwYoKcOsrOk_>$7W&QHYxj&4q<$Uta-oO$@J z@BRa&d}rO2_uhE-H-77PCS0mj0DEw9{|A2XAKp3n#N+$-TlK*J5;oP+idt?rY>2l4z_mGt$njp@vis5LnGCEP(i1|J~p4g*$Km$oK#KqzRcfn}e5L{^)yez9GO0 z4ZxPui<3u>&QH&pI+O+(Yiq4kBy3CLL}?g9mQhP7wbW8Y@-j`tG>#J!NB9R3CCQGC zMrN8M*Q$WE7A**Q7$h+ZY13t{GE$OMOBLZf42MS>BBBGV)i>+$%F*HVYuDa*^Y(l1 zJs?Sm*YiAY=W|D}=9mxwOHpmmYNVvN+MM$MRb%!P!r&xTn}HE=SxRPU))<9|6mVG< zP7-VuAgI=eQzl|bf)P{0-3lA1h^ZwRVk2x?T5T-i7y~A^rjatFX023CIdBYch^oZT=Au>c&2%=S(K^ax3~ROWOC8AQiR*O2so zK#{X=mZ{31Dd_)ieOD7^Qch|1^#2`(3zL2?vtfy}{wqJ&O{%71T8b|#8 z34;UlZmW3cC~X%Ah822U%ASnwkxOV18r`ufMhL%Hzw+!7`Uxn^`|k=AoV$IrLsY2dJ&#HJ&{t+m$5&^`K%QHEi_fbkg-&`euvZVCkA;LZkK zv;@&lOjhT-UbR|v)~-MTFw<$SoWv1zDM3x3VMxdkP>8H|s&TL!alL74B*D&rH*e5{ zv1%bgYnn%X@6C7r+#mf5_wGD-{^kch|G7`6&8mqXA}kYZ((t(LOu<0evH8p@0I1Ct zS={vI^&8V9^E_3gQp#M4WM+v>D_EvN)R+XETGK2Eh|FMKs!`f4?d)W`>=w@{uXYdf zqz_hkd6q#8ED3?jO2!9wwtwvhf8wA2)UW>=-~Z=deEFA76O0GLpZQCF`fI-7>;GT> z&7ZyZ-lJw&Z8rj3yDtC6zx5lw>p%N0&1Ig!fXr2*uP##d_JdEfKXf=VN}rt~)v7t9 zaX8*w8`f7}dhvyS^^>2FjIEiY{lov`Z|5Xh8v-7$udb0UcH6V+lG>~_i(129{!PDR zDdtAZV^pWQY78RiNI;=TBjStQ_Qs9PpZrh$z&C#R$6xu(n_&5cFZ=l2M|bBM-zovH z$B!PKTv<)i7ATRy?({rMHV0^3P41>kDds+mS&#_1HC?S%#1trUDGM=`r2+s6Cy`c+ zoYBD*21yRS+wR6yPM**~gtR(XV`4(CMVI-U3G*-z(m3+b^VhCkJ$(9^>v!IJ^wt}9 z@4S2W?2J>+)x6ba)g)nj2ZNRn7MA#i84EC>1E}hdhovrAQmJ(q5;%f+$}-P$45U#* zg+R!m=FH2o;6MfjYFWlo7P6@L?vYuhg@tQd_TaK3u@IX%5)H!u4sMoGGH_Gv*}V>} z)s)sDUMh8A0oBM{WJWNn5!oC{kUks+!W}7_?q(K|3{Ii(3$dpYqP9j%5Mdc+4(JgG z(*qpQg16~NUPs1J|9@uW9!cN;-fd_h@rXu4FemPT4`vDg$h7ZC?HZeo*I0+}_dxl90Nz=WQ|!`~@T*2- zhM7X#tnmIN;9c6%HIab5moldGOR~oIQl%i6gAD-0{l7+CP=)W)JN+reZ?Rt(;h=-~ z@qLr%4;F3!LfLM2c}YmXLWE?I!D=o^RJAFm#3>I*0N|1nbLjL_k1qg|SC8>j} zVJILt?2L#2lE=4RdsELRTWFO>k+j>LxzToMSJTb!{b!$i^v2KqhTr_{+geSVxq%gn z>S&Y(@XQCE-|g!5{P8@M)~aNXL5O{|8VHS39x^svwBj_)SFb*`Tk82~d35^7P|LE^ zr8RS6Wfa|&H-GN6Cy&mr;FSwMM{9;=Sq3_?w!L%z$+!Q;KltDO&A<4SAO9uiyX}zk zZ~czn_$}Z3^*`_fKm5uoKdZj`im(03U-hfM>BWzInR=a<^SJ*28H54Z$YNh51hDwr zh4=y-C1@a1myFh2Tcx~X<st%0MMGm$3+op;kx z3Yg8M5*nxhaO4A0Ge?q?3GD1*Cj{dv|Hj|>>wfLTk00)S?v>a6!4LlcfDz;7;HXWz zC-?6>JQ@j=MBF^3tm@X z<mEDZeY^SuTX$T6QrrBF$;pD z5Of%+pKpi`st`}LuQS-|48KGidFiO?Y1#WRHkO!BC0WxwVc?hMf!I)}OW@x>cB3aN z6sw_dN7z@Gg<&B^B}4{t@R0ihfPr0xs$u80gN_Dfig=I9e-uyHA~hfPBNy!9B#Ivz z3Fenl|3IU#OE29c?g&CpZDt(yxV>U3f->Frs(JA4TMH>?Q1xVP%+xiV0A{$COafl^ z54ho_@`j>D9r|McxI2SOO5)~`ax6o?EhQxc7*_)#AVW$iUPliSF-O2wwY3Tkl9L-2 ztpLcx!!Sm0xC7*zTCL2&Bw?R+^SR7@`ORYLYBdlHMRjm8FEtVeg^}l_wc417V{3J2 z-T<9Qh}m8DZ=5rc5wudC+`0GU@yYgd`OMGXsqVA3l?>A|yFJt=PYyTNYnz*^H5*bc zRwAQlsf_>+53Z&(ASF}q21~2UV#L;}f!EE!fmL-x;j~&EYQyt0{qcYL$&2zt+uXDu zIuChFBbf++DAb*TxK%|X6ftYf0cJCy*WY>apZ$?P`@j6HzbXeewH0E#`3s)^y?^XK z*eyE(g~Sb8YqNtSB#_X}p+gU|>Maa?0VRyyYH)Ihz8?}cFamSn=1}MQRSO2 zb%2IVF@ZFovw2|x1xg$RM99obtv~p8e&}N#`=Bv?;JN2aYozB23V{(oN=(3*YRqa) z{p9Xrrs3Xu=b!qySO58s{@AOpd`>udGIXe>U-;aoZ(hBUGL56NW6rtEQ*egfbl%S4 znREx?-#EIAL7 zK`n`>E01F>1)0EsMJ~2GcOP}*isF$fmx!3&(v5j z)@s7Ni)t@+L48PRbsRHb;LzQ=aFyG%k4dg;`?d}MZXL_$-J9U`Ev&Xz&PkYa9+ z*_tR`VE{)MT62rSmVF(1KXaoBJ%|#B<2Y`@xLvxkF(gXf!LPWh`il%RCG?V?KFf#n zD!66a<7gP!$=(4q4-2ODd}jo@j0=j}vj3MMks|EOOdmEvkV8c7E~;uxg%TtTp+y|} zISsWHKm>)-l!=GcP`w4io`*qImokf_)|xrCGUqWTNk-b5BKWWw%~Wzywe7_Ykg63^ zTd!6k9Aq~lrj!7bq7MNrj4kS%g#oCP3TDEIm;oIr76V2^b9GfGUv{&k0UdKrR_*oI zZ*S*G-K^ERGyqm3uvHUy^62M&(bxWR8dtcR6S0FQ=J;@;)Ai%02FXtzJy}X22n+>H z8#98dB;KCSN1Fo!+f8TJZ$9HQzW4g=&wufi0uKm?02ExI3JeMIKrE0`&cm>|Dz~=N zc9d*5gZnw0510n`pZ%Fve(>*p|8M)-KAmsbNERWEp`8H_r?&-rK&7xBx6@ z4Zu~K049e||K!jAmhbpCml@6;o=#`8YDGYA&V(_QfSC;09JIA@y}9@9z4MFmnO9!_ zkstmi5AQ#mbRJhL0bZsBj924fsf~$E8<_9P4xA#{1HtN4)(2xP6^K|;8rSZM47C(T zC&6Jos@9wb08EmIhhfOeu58u^r4Gzb%8j7Ajs2ON1X zDJ5+Rt*KccV`|``**7pmM`LCLY^^X$q|pN)vxF7-eS`xXiHOL}yg48scZrW%2a^NO z_kK!-mJw+A-bix{#HWY;L&%2Wa zQxSOy{WOJMA?Xm6De6RqNEp$eeJKu!BoMMf3jiATpvfLK0{5<$R5cL-a8>utT2pup zFg#4|aTms&6W|gcnL08ehE~7J9^FjAx>TrB%m#|swX_tn7$l55f_Mbeexpa!gkSCs z9++R3w$k33hJc71I9(VTItR0l*nmBa(XpY9KRF_baFV>rIn`R1fK~}yaj}J&4LoH* zU~e{Wmy{*2x!ttQl1#M%xDw|?#DuKPO06U~u7*;|G)+h}u2kAOX?b4 zwWit#TQKK7FN8!)jU`lG?uJxRYXnpa4Y}=>sg>p^ zNszN7n(Ov^|Hj|`rQi6CAO4D$KmC)R5aMPgl*|-?!SKrQ4Rbg>Jt1@g=N{?}BtWH# zz%aGPj??E)So2x$Zgat1*_FlcV-ix(P_)HWH|=HRduIiGi{;d&w> zxR`4B>;Lcn={Nr7Unl8GOk3gfsIg>PSQ!X#?5bc@MKv@4LyLa!OO2PSx2VVlaB@Zo zrLzJ8R(dpa14x^R2Jl{s{m?VkA$1KqTyh{P@mvu-S}x zEV*zKVJdTVufu9Rmqksr6>X-~TRW}I-g@WmPyfuP?!0^7y%M0#ivcIeDUHN5&D)d? z=4B_y+A1Pu5eFv`BPXHNu&T8YVfZ2mkTMZ-YtW_*g&*~_2gfG zB;pPPKtR#yNWx|^e_`4zvfN90w)rWt%aMBP#3x z{oqhdn@4JWoTwck>*KiZR};8&)1vQnrDo<`dlTJi!O>!u;UacsItW}h^zc7i;ysr! zZE-bG-|FI%62G23^%q1o#;=9rZs`|esK&fA#ru=Lzd*2#)qy%7h_=>ht+fo}U>d9k z07@-W!v+*?fD}ou%e1ssfXLj(add!#^~gj_Y%B=iW_dLbBOqoO8dfI&w^E8o;*?^o zo2ChNhTOe>4(4F!DUaun9j|j7bc8#<(@O?lPQfo%+2%d&SMBug_M@Iy8B5I0` zykJu>A<+jHw>)-s#f9a=x@)Kyt2$BY9Ey-}ay7tWVXNhFF*cp1AE9W!} z+1$iXn3hGY;&4qs8_NjAc6EAu_6Whk7#dGSTezdC*RLoYvk{P^PW`O%flFbqcr z2jeD>gN*Bu0GWtM7}ww?k{or&gFA=_x~~t{!SN-+rnD?GBV50EV>itK1#8wk49h&5 zK{Gu#+T@fBj45kvwG}4f%mh45J7ya4u#{5g#Q=sOFH0TrfD}%_tk#56tL5PEkieHx zRqJl{)v$j01IO2H9zOTnQ?I@L?i*it>*4)V1jtDYQt?HD<3uO(y3DB3u#s>A0x(K! zttLqT*0fb^LmmLxY6U`T*3()zx|G5zPJMI?E2skix~d?nMq($L8A+IXxfO*d0hbhW zp&1|{F>6yoAZ7=Pb|w;LVhE`yU}#2}M9oa2PYBd3uyceS2OS5vs`vR9(ba&#%qa3* z0xt?lXbd03G3`cX@jj{;7zhwTGSlN0%%O*r!TxmZa+~NLC!+lof|omn1NfJu2zv)R z!kr7$qlfxvuWCVKYgGO^qT}9X8xPkb3j;R`ikKYw9^Dy>Sc1&=LHpo+>w2F;*)s`o z$3)<$1tHwCd}6r?$5qs-K~O*O=EgM{!+z+U2&n&X+`phOlfpiEmEcl1v?qRpx8A@0 z{+@wfu4#M11CZQ6TGQ4v8Vgpdu~lP$e)OPNu~4TmA6AroV-_(E!> z)><6g)W+3_h~}1uOo`pKmbTig36Tl4dTBM~q^gLXn1_^+G1z~L6csg9kWq%5<29RE zmmDEl)7I48Nf8r~yEl&r7D~w#o659kb4Q?oVc=u{<1lQsym{|7C|^6g+F%(hQO;gf zC=ZygU%#2tP)gm+H6?Neo3PHBQqtnE8o)tkeR%IQkux?`%bu%U09aEML;?li+GWs< z90>+Rku+q0ysZP6B)T|#EaJ{?)i@2+$`5}3|MucXUb5l9Z9(ky2~nPk=w_zc06O(b zK#}v+)qEYM1aoHujJE8^hic7HRh5`fTh8lW@=Je_dW#RgnI%fK)&hR-(YtP@p7TtpOD3uOX*t=5fqL+H=p}c<$Mo zzwjHrys5WEtuNsWsd+^|%nlbV5_2aKTdhy1MgLhuP`}pzc+1bTz0Mgg>)si`a=Ey3?>~rJyjgIC#?r?#LuU=%7Td zPAmY3-fF3l8xfM5koZL$f%W1L1aNJQ2oN0sRn^syQ)`t);>#b2axpk`9cPTDNKF+1 zJtnx0kH_R3;bI}eq5e-0`oiJPNb1^w$QVTX)4}*5QRV}HB1Am|!Xd(cx`72DQa0Vg zhN^y+77$M#`A*$3=`*!gsDL=1Sp%XAO`Dege*I{lEtTu$oPDHeA?G*@8S zGv|T9Iey7Ak90go@0^B3Z;W56fxMH%&=ETW2ScL%WWZ&bmmy~&YOU=qW)^a@L2z?; zq^hxVfkE>|$T=q*#@%k~PO4Rs*lGZ%t+rB1N;2dzU_24gW^rQY&3g zAkk_iX0Q}vhRBgdKxU~;ljM0ZbaL?Cx{G(Zrn1X$bRqSSC{^VOr{LmlV&;szdHzjF27V<+Sp}zwi5hBp(QYwgyOyoB_Fl{@dU7ZJ+(rE7K09 zZ7ECDVw{MR0MKsQdNUv&(qIa$G@-Pc=0QeaGH6K{pr#Gi0@@5S>r%$`z{0}oAoLA^ zaRrF2*tFYj##Ky#gjkmv3XYt_g#iFjMjDBE+D_!S+f9T_%-|r*Ic04&O;{3!N zpSpE;e6%@#vb}fb$(`Hx9zHx%v&}dHr|s_CptqoywpJT4A(0!onMnW&9;k9HE#(B1 zNEFPXF)5fEQ!_%XEv;8=X#w04Q(I~n2tq9hy;>Yu(9D@h%?ZiLt+_-wEFzc_k|DVR zlY}4N4TuDhz>$$70)Zgj;hq~D#x53ecMSix0dSupi4b})Jt32;A+f0uNoX-*Hbo)q z6<%=;8ghV^-j|i$dF#~Cntf!D2TdC5&Ys!q`lLAj0Uc4g1R3_ycH9>aAfjonEHgK< z9*RK7*jKFg)s=ftyk9u|wBCzm`kl8QpyR3SZ;Lo+(V>S|;w8}1rA-uI+U1tgNAP{e zWGAI#OL9a4z+kz3&o)3Oocq$zNqF2#M5(`Xod^#nMu=kfZ$-z9IueHOZ#!lV^+9V4Bxx>N1VXbW#M$Qc8h_D*R^|+SIiG)bZ6|r|Y zwN@vcMa13BG;|S2I1b~yR3=0Uz?ZCP%E?sC8le!uZa0~#xh6^Tv z?mu(osYGKnBVaR^wE5g;-}&5UU;SmzJ%iw_758e6m(zX74v@km2WDEUsyZU5Ix`X= zG6MiPL~1caST10a1O%#XSRdWJd*%4qYsXjaKYlduYH7v1HB}V+p8xv4dig_NO|cJ~ zCZXi%7}j6$i@y4cpZ-E!%4)M#s%`}UYmMcGoGhj6Zl%ZrBt#Jk55hQCZOtTcofnV%S=G=_7y+P{rGVo&u1aZYD#F$(nYkM=4#Ti4b$fAf zaCnGBBt#_J-8M;TwQv%zioi`vYi+$+x48g`YJ2$j78sjE*vef9Rc5ANK3a(1z6W(S8?N?qn@i-Z8g zjAjam%d`lmr4=D0BGp0+EIFhW0i{;0DQ8494IZ%L0Gzm$Mu28&t^o-ex=2C<)rKG# zj2r?ZngbIv2NR5lpdJOWq|FdOggxw2X28K2LM-CZ@ZqlAQFtlg2}%k)xBxfp>c%)4 ztq0y&B%TukV5H$Af_Iye!6l?^PW`xyMS{Sro2l?iK?-*OCIWYBiX4@yaH(_LAK`B1 zVK5HoP(W%isso^EgB}g-d%I+msO*(BF{F1~1wtYUo&1hb+xF;r--LoVhkl&yailoB zmeT;qosgM^F(dKG<0tMQi3!NeTQ)>$THB(IPK?Yf zEQ4g^XxGG?le=Nh6~$>cJED5gGK29tt({>m%ay~;!ZylgTXzh?V5XGv@c;OazWeR> zo($<=HLP}X6#!_|nmvAUx>+BHCw0gEp^KgasH*DP&I_Rdm=G}e*~yt3T{*b%&dEEB z?CjviOk@BqBOWTu3e~{~-K>mxHO*4W?tD4jjO)j{Qw2|+2BCT0eg4&Vzx->TfRttp z1pp`sn`0(4vsNoIqLW8Ef^ayc5fI#%IA%{KWQyGZ0kO84A~TAhw(`cO-hAfPa((sO zL%6^u?p0tQ5-`1ZeE(-2{cHzWofHF-Xkf=++V^DK9yEr>{vsRimO*ysNN>O4qH6Sk2vdm@3V{LWbm2o{Dtk#)@ zMdo=Lhr!i$+ldn$UOjADSInk*e!fjZN;v^?S(>9yyWKbr+DtNExp}xc95z?hx1PE2 z-o2A|?%ds;FY8fKI#_ngQWqeB=mP<+r4UPVLvt@xhGbq``&x zJzqT>Mn)JgJ~4#{&g1-|C=!T@?mh0^W%3l^%m(3CRe%2=jMFhJ!{G)%M*|Ci`OH7VJ2$+)ZoU-0 zw>>q|l|}oTnObW}7#YACI7GJ$QI6ky5)l@6*EX-l zv00NY7epo!6h!c*)eIAzKi<9i*1JFbFW)Q%n|!sFngLkIfLooA(OpH*RE5RO1;%gs z)!&2$AYR*SMF&aM8-Q*$S!=7cnCU#t$5*ZpN~sF~X>F48yzJ^+rn#`Nh?Hd}0wOT= zWv=s5nzk}GNkqgB&XT5S8FFUglyfUBgooO6UUtICz=YE(=hl*WVdhfsVmq}~vJAmz z)}=V1FGW?a-ner5_#_Pjx;JepF*>%Y>-AczHS=|nQtGmsqn*QR70lCaGHYhd-B;^j zS!$~lh1cWQW;Fvze0+SYs=Ikx>vHYZ>gtVy7hZnmsW*?`c=eqpC)@2sTOVILpDs$7 z)m*EFSt|788pW-(sR0pA+gWk~Z;>h)x_j%8`d*|SN31)5#d7RwG7K15_MP*M@sOY^ zW?YguxHcmu03wm58WdV?yjOh$cwk|AjpL|;&R;^N;$A1yRVID-L<+q*_0$Cd zi>@xTE&~DwM@BR>?Yl*%AQ8SKDKri^z>aaek96Vt2UeWs{f`~43CSbHk5VS??1On= zQ{9B&`y;i3KbLbbf?I6X=)tD;X9FR}3%mvU?>Bb?1lS7d%uQYG`zzl(Fy`Gnw_1crnAOe9n>RBXR{_RVVopg2S!+uhn2DLRxgvuoAR+Kr66W9P- ztHY3*=~9~ep%UjKmQm1((8ZoZ3nGxUdyBoUe@EmZeAXpJUBeM(zY8i%i~Dc=8O5g+xIu;tk6h! zo)%^bn@6P8k4em7z1l40ye>5fCr&A+IP@>J7p*FyXGs8njFcp$t~;A|?VZ;iY@aMY z`-wN}JZljHGXTLX#AbkOBAiHe^Z7`y6uZ8@_UuzP9zVW&^~!j7usT0^B8OR9S+s-^ z0hyD)FkV5%X*VO7t(kC z$FeNj?KF%T5m*GwOko%@BZpM1)FmfQG%zP5NSv1?Pt$bm>eY*ji$pxvI^?mnYHBQ^ zRm-jfzjuCd#w3rQJU%|Wnk8+|w@5IIt5#-NZ;IAwp5}RBg0xpDo&TX8`VsJ>0*=VP@~^VxXhpgkT-{ z#{KdThZc5%v@??d@B_rme)%u=lh)m%sC+-4_nRZWj)+~u*pI{z|8}h342XNNO^=<} zkJ<6+FO@+E5Do&nDFPLmEw#+r&Nd`hf zU6cXyup%N#RBIXYFl@$Bio54AElVNfGz=2&p#cI6iHT{c_2}pT0hhVBDQ8JC#%j7+ zubS#SP1}o$dB=H3(SESI*rg$@#$jBoNm#WJW6H8#uT9&$%*(vg+FA>_2m=A3Skt0Q zt7LAw-6S(XGjhQ-+`M`7sb`%QiX{{BDk;tR)D zj*rG+tgY3i<5~#he7;a^V_Hr1d?>zN%XZq4O3tg@uDtWs{XDwEvN_&JN{CprSyL7% z%QOz@;P_D6&fOCVILuSA=7qQ|3k#`MCO$j_B59>zX*v$*w#nl7esl-4uOD2$dGz?f>AP>=dvdaK1Eg`<&hy2R#$?z-8dx3r@Wg-=nkqikN=wD-0Mm}L{Qa$O3amj`*}-9 zgr<#-v0DK4Q@H``TWTOawS5n9Fa+AKWPs2iv5-{~5?wkK059Lu_ebdU{{F9Vk=i~E=SyA{4+oInMd!PC0(WU!L+^D)|s<3YoO@nYK@T6uySBWb+_ixC8V*6MW%eKRs zS#r+gIIdUowhY5SfM5#bwJwL7gVXaViA3VqyllN`lKlA5+1+=~b|)@{YM0Jb56ntrofCMQg%zuqnftX8iM3RC=l2~Q+MC)c1hASmn6c_ zn91EGbJ0cJ(vYC}#rDG8bIy`jSauiZty#{)>B-rZtHS` zk4_$4yLPoTYfGJ#F3vAf4k&;qKtCpiH zM?_SX28e0k>rWqDxwbhx-rT?Y=$*Ik?Uu3`kB4zyYFU;EkV>0`Q>!%t5oguKz_k=0 zjN)G)M6+4}4AL+Vp&Dw_JdUl_B!hZ$H$o;xS4SeI-f4=U%qePt5j;G+YrT5=u%hou2sEsE#muE z*yU@vTv_@%8UORkJ*7ir_$6uEpY+`koeHFQZ$PI5jtsAWfJCP(blS(4(lP_mePs? zjO&#QgF4L9uC3qJ;IbWPD zLr!MEKvt`xk>I08r;_q|9Dz~#$^+-~`GdQ=cV54L@6O3IRR9{s^>TJ%Pyr?acSx=# zOoTkr@bRzy+UIWFeDT8{dh4yvY&M(K;n8$)HXa?#(?!aHNZPcu)~W%Tn-Ak^o+c$6 zavp}ny@fmlUm@sxxSn_0v-905uZA_IB!DpFyxUD#cpNeymZGiB4w#6Um@-fE)S4FJ zxs;=$gW6ncOOixVndXo=cz!YkcZ9S z0P|eUlz@n-l_ibCb1&X_>X|FIp1Jf^n`RkzBT(M{1Up8a=z_o`l_@ z)X>Yb??+5<2w~A)-~Rr&(@!MBu&-T0_YRJc$KZSH8^FN158t>4-+MnUgeks4owC+Q{_qn;JRP5Og z0NYhkY+w$A{c6Pi6Nm*pEkx>t-M0v;SFUu(ypt=PWK| zJslS7?=0=*N)pee&2t{q;xHoo=7&ku)k<;DRRZqMxG(Sva{BDvN!Bw

    rxZPeX)0|Rr^3B0!x0^;zvwErJ@aUk_!Xj4=uUt&$gzU9#&vwO1 zN^;=nV6E11wK_RDO(N^f`r>?t!Va*#*yS;|*2cr(;AmZ1W5JQqji-(eHk*5QAHDb9 zg9rCdhT-_|=;-A1beeWZs15g%TO0^v&5$J^4nj}^_XcK!8S(xTlQ8=Cc=0TJQ7@hWJZXm%w0xSBbY7I#F!k z=>6sH11v8^H~sbR8?hphr^k_kdj!($k)r*y-=P~f3G zvA!8LT6BB1wWgH#`0!ww%2Z}aNzyG{57smdhvOI&A6hkQ zwq6guN2_Ynx|HIJspc^|VAaxUL&j!WceT!y5k*oO>`m6;8rps$6=JhfKL%@GKkh24~T4<-VDBr&9U zs?IYwFZ0PFycy*XTV%cHZi)xnAwceqTuC5c>|Pt$IG@=)@Sq1FrD)mo^+=3w*S!O7XlIUyWf zJ3>N6db~SbZ#Jd4qPIz{!pX^W@?=6zl7Xu=Z_sKIF*Wx_kW8B?JoD5CUwrvP$D7sR zwS)7s`%}a73qt^FVGB$;UJT`1XA34oPIQIV{tBdcJE~bIzqycbLn( z8uGj=txZTij^i{L0o=HH!%WXFwyHJpP|7k6BN4Wyt8s_`mGx$Y1g(G;BQY(_iVs6h znX~Zq8!z6xb$sv6llR_xaPs8r`1xm^Jb7|*axphu%G}8a2SPS;CXR7O!QC2wBf5b( zLTIdkfQi(dT4PRe#zYz*gkS6u!(>9!jxP`afwdBX@$k|HyVzS-&8%Y_5!GPe5XzpO zHfG*ghD+(t{ut~~g98L}V6Z>uJ!Y)^@Cpc>glU<6)ugLv?@V0YVu#g{E?!(%&z<4zsxL#Zch37lJDSA#v!N0b;s7|&+%>_-rrv4hCw&PUehP@OWGltAfe+?1ik7D>GD~7*XZsy z8{GdHF2z!|hsE|*VULf@UPMvEVR_B23ImG}l?14P&mg63{TN zP*_!KwfSOO%PfOLw0eB*w-*B9F=4k_@13>gdQK+H`w9rPUw<-+KP) zGtWMC?bg*BPu+au^>m~l==1Fb&#;Sb%vf3mIRU;fmO&D$rcCG((A z(Up+fVhgt+r!v=8^yKk{2q9vf>UuK{GTeCX+LM#V>tVP!y*Rvb0BEOAwmI|l8`ltI zJsivz%Q|l^F3zkv3IHe)m!)iXOWv&N)J`Ano;=>|wsR?q_emlw?UV%F7?BBAH?BVQ z(wBeuLmztjnP;yLE7)yeTn~Wl;_U3ot!v{r5~J`yjJ4ESORFX4oKnKpw$pSV8*(3W zCPY)!W=L>+Fc3niZJydRO)1G->haM*JckeqrIgeZJXEc$uFF&i0b44nTpJ=S)8eM4 zSV|ekT&B8|a^?8AYPFF|(eXVUR#Z-G!Pqe+ir)2@ydhIOf_uqa`DM=D=-0DUE z>(g_XAwt!9xm+ZreZQxiIq_K+MiyF28Y(*}_{(2DKRsRl?XN%m?Qg&T_Rrt>%k}4< zzI^?5`}Xzw(KZ$W6oThGvW=!;O_6PuXBSMSe!V7>fM_b_oNEzLOyN~@@ z1bk+N0dN33inxJij3^x^?lB|ebWQlce|*YH8F~08BVyPH>cf)ZqcA^#_&}Nqfdc@B zk#ry-It<^)nL5Vd0l>LD{Q>09)G{J+giVLJ(Ljv2ePTYd=$`OD%!iHq=F{5Ze7VPJ z794fIow5Icww<|fzRv8?_|dC8Frf$dKlASci~DG4J}Beio;C)Gr)QYQT$(laP6El5?Jf_PQ-AWR`#XkI$)4TIC;q`}4QI{qgpGuiIV^CmcdJ1PFH* zW+XykL=dKBT^Nv4YR7KC)|;dp;U(wW{SF>gyQ_w|xq*d;TNv~8*j@ue1l6|taSMaD zeSg!pR*#6*p)oO`ATk9zf}{+H%hM`ZtVT%*5LjSYuSv+wmu2nRwYeS^7E8JGy;^4g zc>Q_{#FX*<^|-t!7`vKvO-qto_V4%O)?feF|DXTw-&-|zh%gcAz0(*j23AvI{Po}e z{jb0N^3&(1%cqO1Y~X3l0TAXdpPx#}sU#!4 z$N|Po?P#0?JKT@0l=A)c`{&P}kXU;s#C_XX1RZiNQER?lESb8#-){_(N=}j>#ojw3 z_pa-@c(}QRdJ@dJBo=TG79zUc4^!nXpFVwt1NQq?>sLTu))j@ft(G;2Qr!=hoKia4 zA(=h=?d?X1vZU>He|ml*j;H4@pMHM+kMFF3Y?=hyFF|M}aWhxOh& z3ri~fIG8yCI3*b6BnE0Ypt%AvfFp*v8w3PcC?Q4|5rf0H5H&1iV#aX5a3XRu5hfsq zu>(GUkj@EJ#HrpPLOT(X7`|u|)}F}60G8Y=V7fGqsO51&8GepZ1ppAl=^H^9F>#N9 zM8gUFl1)YdDw86!j8yIUm$Ax=dOJAxb|i4zUd4ValY z3A40%wEOYrZ-2hLJh?kYa0T6LAD^GsU;h24pMQN> zudKasBEZ;>dMyhHv4{w}+FN~F%K`|Ph!iy3%$v5H^RgCge$>Mv5b*7G&m!kuSswP5 zlG5$%wp`beGovsE3yme0;jxxw-;ZU1<7iA|9;M{>x3`q@wJf*yds&vD)U&P-P-N+- z-~RXtK;T%tAN3$4BKiIIKT0W|UX~uc?rps;;ZX0#d-r8obW_)O-?r!Hr~CV6rk|ca z?e*xY2#`ymM2XYqPoJ4&-}ky7t#)F`S@N<38F+w))y`RRSr{1{T!9NSlY>Y1_x-k( z<*2)vGcgMO`j=0ip08j3c>C|a|MUCzH{h4Q{PLH3YybJ5|4%)tSsm;x07jUZL!d~C ziEyx6h@@~;HAFH~&N-aM(k)~{4-Lm*)Dr=K=7x-cPACE3;A4$Dj1A91LNeA2#BdkF zu{t*(9;QHO=0L!5?lQ!=DgNYe0f{hdl(sNnkzrDU4U z0Fr~c0|5a9o(lseIx_b-#Dnz(0C4aL!OWFZL%2#p7(hg0CV-}X62{Jh881glz`0om z&sFLVBG+d(Fw5})nVpI!JgHTm73IhbakAeQGr^1==*%_|)8%KjCiDRQM;?R6v*rhV z9MdCHJj{ULwCI@q*?e7?$vbc)jX9t<`UwX>Nu?Y|{;m z(0Vch!u{=Db9;WiK7acBetQjqW3Q6(WnJ^rsUSv9{J!m6=@awrx43 zypE+D_ulNj9k=gy;>=kuFZuH?*QT90j#}{TE|S{O)%s|?aSp1x2m{3J{lx^v>$=)rUt-F3>*$A zukPFqyYtbzB7%qB-wzPz$B~!B%(wRq!n@kCl=X7qoch);mlX*tEQ$Q~$DhKqUM|{g zQDY`;alF-j;Br|mPg<+0lw-dYNyKEfCoR+1m&v|(&z?O3=fq6-vetJ6U zR&ojRy|rasMdYZ59kwnD1W1y=xU6g9G%B5d$ce)!r<6--wU2Vs(6p)(auOoMoVWX) zkPr6=e|vpPNq{M*?B-0gEX5sa?bqvbxYyQGDk&%HzU`YxBIMis{c^d!zdHl~!*Lv= zb>Fu4%VjMox7G%tu3f{-0`~jn7IRODLF>J&%dzio_cv9&T&`~Z{{FUJE@574Ev2MV z%x#Q_}Czu_s- z9Gf0TR17e44HP;ZZ2%sQI+H0qY0DFL`GK8;FlvD1qTz@%<@e{SokcRxqsRHsPM%5Tgz-;?_KdcOk3$E5>B$&BjF`>&h1pUJ zpX~=~G~u2h8}$=7dSu3tMCb93;(amzF&P?s82p?{)f3@AMO8nX|Cn6ULr?V4B!K_` zi{z5E_x-*Tk(rj9L>L_rST$6&

    JxZBHdVKRxAAn$}jk9t{vQ+&knV+BKr(oc4Vq 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 +Nd=Ya*)3fgscXYM1T&7FYVq{|hNNo_i&R{kn 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 Date: Thu, 28 Nov 2024 12:50:28 +0100 Subject: [PATCH 088/106] Updated acknowledgements --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f01c67c9..c92d4a4e 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,12 @@ license text. This development is partially funded by the [EGI Strategic and Innovation Fund](https://www.egi.eu/about/egi-council/egi-strategic-and-innovation-fund/). -Partially funded by the project [AI-SPRINT](https://ai-sprint-project.eu) "AI in Secure Privacy-Preserving Computing Continuum" that has received funding from the European Union’s Horizon 2020 Research and Innovation Programme under Grant 101016577. +Partially funded by the projects: + +- [AI-SPRINT](https://ai-sprint-project.eu) "AI in Secure Privacy-Preserving Computing Continuum" that has received funding from the European Union’s Horizon 2020 Research and Innovation Programme under Grant 101016577. +- [interTwin](https://intertwin.eu) "An interdisciplinary Digital Twin Engine for science" that has received funding from the European Union’s Horizon Europe Programme under Grant 101058386. +- [AI4EOSC](https://ai4eosc.eu) "Artificial Intelligence for the European Open Science Cloud" that has received funding from the European Union’s Horizon Europe Research and Innovation Programme under Grant 101058593." +- [iMagine](http://imagine-ai.eu) "AI-based image data analysis tools for aquatic research" that has received funding from the European Union’s Horizon Europe Research and Innovation Programme under Grant 101058625. Also, Grant PDC2021-120844-I00 funded by Ministerio de Ciencia e Innovación/Agencia Estatal de Investigación/ 10.13039/501100011033 and by “European Union NextGenerationEU/PRTR” and Grant PID2020-113126RB-I00 funded by Ministerio de Ciencia e Innovación/Agencia Estatal de Investigación/ 10.13039/501100011033. From a758284ba8ddef34b97e7ce42a75d2cb3b969b18 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Mon, 9 Dec 2024 10:28:51 +0100 Subject: [PATCH 089/106] correction of function names --- pkg/resourcemanager/delegate.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index a47d878c..5f1bf78e 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -407,7 +407,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error // Criteria weights () weight := []float64{1, 8, 18, 65, 2, 6} preferences := topsisMethod(results, weight) - newAlternatives := sortbyUmbral(preferences, 20) + newAlternatives := sortbyThreshold(preferences, 20) // Print reordered alternatives fmt.Println("\nAlternatives reordered by threshold:") @@ -430,13 +430,13 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error } fmt.Println("Event : ", event) + /*delegatedEvent := WrapEvent(service.ClusterID, event) eventJSON, err := json.Marshal(delegatedEvent) if err != nil { return fmt.Errorf("error marshalling delegated event: %v", err) - } - */ + }*/ storage_provider := service.ClusterID //Create event depending on delegation level @@ -854,7 +854,7 @@ func topsisMethod(results [][]float64, weight []float64) []float64 { } -func sortbyUmbral(preferences []float64, umbral int) []Alternative { +func sortbyThreshold(preferences []float64, umbral int) []Alternative { // Step 5: Order alternatives from best to worst alternativesSort := sortAlternatives(preferences) From 8ce06c4dc409f7525f6a8dbb80bfbde1f2d122a4 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Mon, 9 Dec 2024 11:35:11 +0100 Subject: [PATCH 090/106] error with function --- pkg/resourcemanager/delegate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 5f1bf78e..f348c180 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -939,7 +939,7 @@ func createParameters(results [][]float64, duration time.Duration, clusterStatus } func eventBuild(event, storage_provider string) []byte { - + fmt.Println("eventBuild Function") var eventMap map[string]interface{} err := json.Unmarshal([]byte(event), &eventMap) if err != nil { From fc0ee0c915f75a1ca768b554914a201533e4c7b8 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Mon, 9 Dec 2024 11:41:20 +0100 Subject: [PATCH 091/106] fix error in commit --- pkg/resourcemanager/delegate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index f348c180..d17819b3 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -939,7 +939,7 @@ func createParameters(results [][]float64, duration time.Duration, clusterStatus } func eventBuild(event, storage_provider string) []byte { - fmt.Println("eventBuild Function") + fmt.Println("eventBuild Function.") var eventMap map[string]interface{} err := json.Unmarshal([]byte(event), &eventMap) if err != nil { From 9d65f9d54d93bdf9853c5a26566f940c866b5d97 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 10 Dec 2024 11:53:47 +0100 Subject: [PATCH 092/106] commet the mutex code --- pkg/resourcemanager/delegate.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index d17819b3..a3d862b9 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -31,7 +31,8 @@ import ( "sort" "strconv" "strings" - "sync" + + //"sync" "time" "github.com/grycap/oscar/v3/pkg/types" @@ -46,7 +47,7 @@ const ( // tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] var tokenCache = map[string]map[string]string{} -var mutex sync.Mutex +//var mutex sync.Mutex // DelegatedEvent wraps the original input event by adding the storage provider ID type DelegatedEvent struct { @@ -258,8 +259,8 @@ func reorganizeIfNearby(alternatives []Alternative, distances []float64, thresho func DelegateJob(service *types.Service, event string, logger *log.Logger) error { //Block access before executing the function - mutex.Lock() - defer mutex.Unlock() + //mutex.Lock() + //defer mutex.Unlock() //Determine priority level of each replica to delegate if service.Delegation == "topsis" { @@ -442,8 +443,6 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error //Create event depending on delegation level eventJSON := eventBuild(event, storage_provider) - fmt.Println(string(eventJSON)) - for _, replica := range service.Replicas { // Manage if replica.Type is "oscar" and have the capacity to receive a service fmt.Println("Delegation job in ClusterID: ", replica.ClusterID, "with Priority ", replica.Priority) @@ -472,6 +471,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) // Make request to get service's definition (including token) from cluster + fmt.Println(eventJSON) req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) if err != nil { logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) @@ -938,7 +938,7 @@ func createParameters(results [][]float64, duration time.Duration, clusterStatus return results } -func eventBuild(event, storage_provider string) []byte { +func eventBuild(event string, storage_provider string) []byte { fmt.Println("eventBuild Function.") var eventMap map[string]interface{} err := json.Unmarshal([]byte(event), &eventMap) From 1ae071f4a2d0d0a0800cb89fde971b1867f79533 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 10 Dec 2024 12:16:16 +0100 Subject: [PATCH 093/106] eventJSON error --- pkg/resourcemanager/delegate.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index a3d862b9..5b820185 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -471,8 +471,9 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) // Make request to get service's definition (including token) from cluster - fmt.Println(eventJSON) + fmt.Println(string(eventJSON)) req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) + if err != nil { logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) continue From b87622ce93c0d28bbc1d7a44ad5f0dd4d4efdaf0 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 10 Dec 2024 13:11:35 +0100 Subject: [PATCH 094/106] debug delegation event --- pkg/resourcemanager/delegate.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 5b820185..33d93de6 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -940,7 +940,7 @@ func createParameters(results [][]float64, duration time.Duration, clusterStatus } func eventBuild(event string, storage_provider string) []byte { - fmt.Println("eventBuild Function.") + fmt.Println("eventBuild Function...") var eventMap map[string]interface{} err := json.Unmarshal([]byte(event), &eventMap) if err != nil { @@ -952,9 +952,10 @@ func eventBuild(event string, storage_provider string) []byte { if storage, exists := eventMap["storage_provider"]; exists { fmt.Println("The 'storage_provider' field exists in the event ") eventValue := eventMap["event"] - eventString, _ := json.Marshal(eventValue) + //eventString, _ := json.Marshal(eventValue) - delegatedEvent1 := WrapEvent(storage.(string), string(eventString)) + //delegatedEvent1 := WrapEvent(storage.(string), string(eventString)) + delegatedEvent1 := WrapEvent(storage.(string), eventValue.(string)) fmt.Println("New DelegatedEvent:", delegatedEvent1) k, err1 := json.Marshal(delegatedEvent1) From bc7e943a22bb4697579b7ceb307e3d33fdc9b6a4 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Tue, 10 Dec 2024 14:08:45 +0100 Subject: [PATCH 095/106] mutex function --- pkg/resourcemanager/delegate.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 33d93de6..730735cd 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -32,7 +32,7 @@ import ( "strconv" "strings" - //"sync" + "sync" "time" "github.com/grycap/oscar/v3/pkg/types" @@ -47,7 +47,7 @@ const ( // tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] var tokenCache = map[string]map[string]string{} -//var mutex sync.Mutex +var mutex sync.Mutex // DelegatedEvent wraps the original input event by adding the storage provider ID type DelegatedEvent struct { @@ -259,8 +259,8 @@ func reorganizeIfNearby(alternatives []Alternative, distances []float64, thresho func DelegateJob(service *types.Service, event string, logger *log.Logger) error { //Block access before executing the function - //mutex.Lock() - //defer mutex.Unlock() + mutex.Lock() + defer mutex.Unlock() //Determine priority level of each replica to delegate if service.Delegation == "topsis" { From 5f9b4e6a8f71af212f999058cc692369cd959f30 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 13 Dec 2024 09:44:15 +0100 Subject: [PATCH 096/106] Storage provider test --- pkg/resourcemanager/delegate.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 730735cd..566c52f6 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -32,7 +32,6 @@ import ( "strconv" "strings" - "sync" "time" "github.com/grycap/oscar/v3/pkg/types" @@ -47,7 +46,7 @@ const ( // tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] var tokenCache = map[string]map[string]string{} -var mutex sync.Mutex +//var mutex sync.Mutex // DelegatedEvent wraps the original input event by adding the storage provider ID type DelegatedEvent struct { @@ -259,8 +258,8 @@ func reorganizeIfNearby(alternatives []Alternative, distances []float64, thresho func DelegateJob(service *types.Service, event string, logger *log.Logger) error { //Block access before executing the function - mutex.Lock() - defer mutex.Unlock() + //mutex.Lock() + //defer mutex.Unlock() //Determine priority level of each replica to delegate if service.Delegation == "topsis" { @@ -441,7 +440,9 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error storage_provider := service.ClusterID //Create event depending on delegation level + fmt.Println("Storage_provider : ", storage_provider) eventJSON := eventBuild(event, storage_provider) + fmt.Println(string(eventJSON)) for _, replica := range service.Replicas { // Manage if replica.Type is "oscar" and have the capacity to receive a service @@ -471,7 +472,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) // Make request to get service's definition (including token) from cluster - fmt.Println(string(eventJSON)) + //fmt.Println(string(eventJSON)) req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) if err != nil { From 284a8c05965aec763c0a2df20f112061a68c9ee5 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 13 Dec 2024 10:10:16 +0100 Subject: [PATCH 097/106] Detect storage_provider empty --- pkg/resourcemanager/delegate.go | 222 ++++++++++++++++---------------- 1 file changed, 113 insertions(+), 109 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 566c52f6..972d5160 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -441,141 +441,145 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error storage_provider := service.ClusterID //Create event depending on delegation level fmt.Println("Storage_provider : ", storage_provider) - eventJSON := eventBuild(event, storage_provider) - fmt.Println(string(eventJSON)) + if storage_provider != "" { + eventJSON := eventBuild(event, storage_provider) + fmt.Println(string(eventJSON)) + + for _, replica := range service.Replicas { + // Manage if replica.Type is "oscar" and have the capacity to receive a service + fmt.Println("Delegation job in ClusterID: ", replica.ClusterID, "with Priority ", replica.Priority) + if strings.ToLower(replica.Type) == oscarReplicaType && replica.Priority < noDelegateCode { + // Check ClusterID is defined in 'Clusters' + fmt.Println("Delegating ...") + cluster, ok := service.Clusters[replica.ClusterID] + if !ok { + logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) + continue + } - for _, replica := range service.Replicas { - // Manage if replica.Type is "oscar" and have the capacity to receive a service - fmt.Println("Delegation job in ClusterID: ", replica.ClusterID, "with Priority ", replica.Priority) - if strings.ToLower(replica.Type) == oscarReplicaType && replica.Priority < noDelegateCode { - // Check ClusterID is defined in 'Clusters' - fmt.Println("Delegating ...") - cluster, ok := service.Clusters[replica.ClusterID] - if !ok { - logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) - continue - } + // Get token + token, err := getServiceToken(replica, cluster) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } - // Get token - token, err := getServiceToken(replica, cluster) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) - continue - } + // Parse the cluster's endpoint URL and add the service's path + postJobURL, err := url.Parse(cluster.Endpoint) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) - // Parse the cluster's endpoint URL and add the service's path - postJobURL, err := url.Parse(cluster.Endpoint) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) - continue - } - postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) + // Make request to get service's definition (including token) from cluster + //fmt.Println(string(eventJSON)) + req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) - // Make request to get service's definition (including token) from cluster - //fmt.Println(string(eventJSON)) - req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) + continue + } - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) - continue - } + // Add Headers + for k, v := range replica.Headers { + req.Header.Add(k, v) + } - // Add Headers - for k, v := range replica.Headers { - req.Header.Add(k, v) - } + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) - // Add service token to the request - req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + // Make HTTP client - // Make HTTP client + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } - var transport http.RoundTripper = &http.Transport{ - // Enable/disable SSL verification - TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, - } + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } - client := &http.Client{ - Transport: transport, - Timeout: time.Second * 20, - } + // Send the request + res, err := client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue + } - // Send the request - res, err := client.Do(req) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) - continue + // Check status code + if res.StatusCode == http.StatusCreated { + logger.Printf("Job successfully delegated to cluster \"%s\"\n", replica.ClusterID) + return nil + } else if res.StatusCode == http.StatusUnauthorized { + // Retry updating the token + token, err := updateServiceToken(replica, cluster) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Send the request + res, err = client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue + } + } + log.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": Status code %d\n", service.Name, replica.ClusterID, res.StatusCode) } - // Check status code - if res.StatusCode == http.StatusCreated { - logger.Printf("Job successfully delegated to cluster \"%s\"\n", replica.ClusterID) - return nil - } else if res.StatusCode == http.StatusUnauthorized { - // Retry updating the token - token, err := updateServiceToken(replica, cluster) + // Manage if replica.Type is "endpoint" + if strings.ToLower(replica.Type) == endpointReplicaType { + // Parse the replica URL to check if it's valid + replicaURL, err := url.Parse(replica.URL) if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to parse URL: %v\n", service.Name, replica.URL, err) continue } - // Add service token to the request - req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) - // Send the request - res, err = client.Do(req) + // Make request to get service's definition (including token) from cluster + req, err := http.NewRequest(http.MethodPost, replicaURL.String(), bytes.NewBuffer(eventJSON)) if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to make request: %v\n", service.Name, replica.URL, err) continue } - } - log.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": Status code %d\n", service.Name, replica.ClusterID, res.StatusCode) - } - - // Manage if replica.Type is "endpoint" - if strings.ToLower(replica.Type) == endpointReplicaType { - // Parse the replica URL to check if it's valid - replicaURL, err := url.Parse(replica.URL) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to parse URL: %v\n", service.Name, replica.URL, err) - continue - } - // Make request to get service's definition (including token) from cluster - req, err := http.NewRequest(http.MethodPost, replicaURL.String(), bytes.NewBuffer(eventJSON)) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to make request: %v\n", service.Name, replica.URL, err) - continue - } - - // Add Headers - for k, v := range replica.Headers { - req.Header.Add(k, v) - } + // Add Headers + for k, v := range replica.Headers { + req.Header.Add(k, v) + } - // Make HTTP client - var transport http.RoundTripper = &http.Transport{ - // Enable/disable SSL verification - TLSClientConfig: &tls.Config{InsecureSkipVerify: !replica.SSLVerify}, - } - client := &http.Client{ - Transport: transport, - Timeout: time.Second * 20, - } + // Make HTTP client + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !replica.SSLVerify}, + } + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } - // Send the request - res, err := client.Do(req) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to send request: %v\n", service.Name, replica.URL, err) - continue - } + // Send the request + res, err := client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to send request: %v\n", service.Name, replica.URL, err) + continue + } - // Check status code - if res.StatusCode == http.StatusOK { - logger.Printf("Job successfully delegated to endpoint \"%s\"\n", replica.URL) - return nil + // Check status code + if res.StatusCode == http.StatusOK { + logger.Printf("Job successfully delegated to endpoint \"%s\"\n", replica.URL) + return nil + } + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": Status code %d\n", service.Name, replica.URL, res.StatusCode) } - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": Status code %d\n", service.Name, replica.URL, res.StatusCode) } + } else { + fmt.Println("Error by Storage_Provider empty.") } return fmt.Errorf("unable to delegate job from service \"%s\" to any replica, scheduling in the current cluster", service.Name) From 86c17ac25bceca1159bb09fc9b9d9784ed97bddb Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 13 Dec 2024 11:25:32 +0100 Subject: [PATCH 098/106] delegation non-empty storage provider --- pkg/resourcemanager/delegate.go | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 972d5160..6665e4da 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -440,10 +440,12 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error storage_provider := service.ClusterID //Create event depending on delegation level - fmt.Println("Storage_provider : ", storage_provider) - if storage_provider != "" { - eventJSON := eventBuild(event, storage_provider) - fmt.Println(string(eventJSON)) + + eventJSON, provider := eventBuild(event, storage_provider) + fmt.Println("Storage_provider : ", provider) + fmt.Println(string(eventJSON)) + + if provider != "" { //storatage _provider not empty in the delegation proccess. for _, replica := range service.Replicas { // Manage if replica.Type is "oscar" and have the capacity to receive a service @@ -944,15 +946,16 @@ func createParameters(results [][]float64, duration time.Duration, clusterStatus return results } -func eventBuild(event string, storage_provider string) []byte { +func eventBuild(event string, storage_provider string) ([]byte, string) { fmt.Println("eventBuild Function...") var eventMap map[string]interface{} + var cluster_storage string err := json.Unmarshal([]byte(event), &eventMap) if err != nil { fmt.Println("Error to read the event:", err) - return nil + return nil, "" } - fmt.Println(len(eventMap)) + //fmt.Println(len(eventMap)) var eventJSON []byte if storage, exists := eventMap["storage_provider"]; exists { fmt.Println("The 'storage_provider' field exists in the event ") @@ -968,28 +971,27 @@ func eventBuild(event string, storage_provider string) []byte { //k, err1 := json.Marshal(event) if err1 != nil { fmt.Printf("error marshalling delegated event: %v ", err1) - return nil + return nil, "" } - //k := []byte(event) - //k := bytes.NewBuffer(event) + eventJSON = k + cluster_storage = storage.(string) } else { fmt.Println("The 'storage_provider' field does NOT exist in the event") - //storage := "oscar_provider" - //eventValue, _ = eventMap["event"] - //fmt.Println(eventValue) + delegatedEvent := WrapEvent(storage_provider, event) fmt.Println("New DelegatedEvent:", delegatedEvent) z, err2 := json.Marshal(delegatedEvent) if err2 != nil { fmt.Printf("error marshalling delegated event: %v", err2) - return nil + return nil, "" } eventJSON = z + cluster_storage = storage_provider } //fmt.Println(string(eventJson)) - return eventJSON + return eventJSON, cluster_storage } From c397dad34c39fb42051a862f88a888c145e93e31 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Mon, 16 Dec 2024 10:25:26 +0100 Subject: [PATCH 099/106] error with storage_provider empty --- pkg/resourcemanager/delegate.go | 230 ++++++++++++++++---------------- 1 file changed, 115 insertions(+), 115 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 6665e4da..e391d44b 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -31,7 +31,7 @@ import ( "sort" "strconv" "strings" - + "sync" "time" "github.com/grycap/oscar/v3/pkg/types" @@ -46,7 +46,7 @@ const ( // tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] var tokenCache = map[string]map[string]string{} -//var mutex sync.Mutex +var mutex sync.Mutex // DelegatedEvent wraps the original input event by adding the storage provider ID type DelegatedEvent struct { @@ -258,8 +258,8 @@ func reorganizeIfNearby(alternatives []Alternative, distances []float64, thresho func DelegateJob(service *types.Service, event string, logger *log.Logger) error { //Block access before executing the function - //mutex.Lock() - //defer mutex.Unlock() + mutex.Lock() + defer mutex.Unlock() //Determine priority level of each replica to delegate if service.Delegation == "topsis" { @@ -445,144 +445,144 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error fmt.Println("Storage_provider : ", provider) fmt.Println(string(eventJSON)) - if provider != "" { //storatage _provider not empty in the delegation proccess. - - for _, replica := range service.Replicas { - // Manage if replica.Type is "oscar" and have the capacity to receive a service - fmt.Println("Delegation job in ClusterID: ", replica.ClusterID, "with Priority ", replica.Priority) - if strings.ToLower(replica.Type) == oscarReplicaType && replica.Priority < noDelegateCode { - // Check ClusterID is defined in 'Clusters' - fmt.Println("Delegating ...") - cluster, ok := service.Clusters[replica.ClusterID] - if !ok { - logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) - continue - } - - // Get token - token, err := getServiceToken(replica, cluster) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) - continue - } + //if provider != "" { //storatage _provider not empty in the delegation proccess. - // Parse the cluster's endpoint URL and add the service's path - postJobURL, err := url.Parse(cluster.Endpoint) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) - continue - } - postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) + for _, replica := range service.Replicas { + // Manage if replica.Type is "oscar" and have the capacity to receive a service + fmt.Println("Delegation job in ClusterID: ", replica.ClusterID, "with Priority ", replica.Priority) + if strings.ToLower(replica.Type) == oscarReplicaType && replica.Priority < noDelegateCode { + // Check ClusterID is defined in 'Clusters' + fmt.Println("Delegating ...") + cluster, ok := service.Clusters[replica.ClusterID] + if !ok { + logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) + continue + } - // Make request to get service's definition (including token) from cluster - //fmt.Println(string(eventJSON)) - req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) + // Get token + token, err := getServiceToken(replica, cluster) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) - continue - } + // Parse the cluster's endpoint URL and add the service's path + postJobURL, err := url.Parse(cluster.Endpoint) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) - // Add Headers - for k, v := range replica.Headers { - req.Header.Add(k, v) - } + // Make request to get service's definition (including token) from cluster + //fmt.Println(string(eventJSON)) + req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) - // Add service token to the request - req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) + continue + } - // Make HTTP client + // Add Headers + for k, v := range replica.Headers { + req.Header.Add(k, v) + } - var transport http.RoundTripper = &http.Transport{ - // Enable/disable SSL verification - TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, - } + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) - client := &http.Client{ - Transport: transport, - Timeout: time.Second * 20, - } + // Make HTTP client - // Send the request - res, err := client.Do(req) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) - continue - } + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } - // Check status code - if res.StatusCode == http.StatusCreated { - logger.Printf("Job successfully delegated to cluster \"%s\"\n", replica.ClusterID) - return nil - } else if res.StatusCode == http.StatusUnauthorized { - // Retry updating the token - token, err := updateServiceToken(replica, cluster) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) - continue - } - // Add service token to the request - req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } - // Send the request - res, err = client.Do(req) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) - continue - } - } - log.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": Status code %d\n", service.Name, replica.ClusterID, res.StatusCode) + // Send the request + res, err := client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue } - // Manage if replica.Type is "endpoint" - if strings.ToLower(replica.Type) == endpointReplicaType { - // Parse the replica URL to check if it's valid - replicaURL, err := url.Parse(replica.URL) + // Check status code + if res.StatusCode == http.StatusCreated { + logger.Printf("Job successfully delegated to cluster \"%s\"\n", replica.ClusterID) + return nil + } else if res.StatusCode == http.StatusUnauthorized { + // Retry updating the token + token, err := updateServiceToken(replica, cluster) if err != nil { - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to parse URL: %v\n", service.Name, replica.URL, err) + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) continue } + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) - // Make request to get service's definition (including token) from cluster - req, err := http.NewRequest(http.MethodPost, replicaURL.String(), bytes.NewBuffer(eventJSON)) + // Send the request + res, err = client.Do(req) if err != nil { - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to make request: %v\n", service.Name, replica.URL, err) + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) continue } + } + log.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": Status code %d\n", service.Name, replica.ClusterID, res.StatusCode) + } - // Add Headers - for k, v := range replica.Headers { - req.Header.Add(k, v) - } + // Manage if replica.Type is "endpoint" + if strings.ToLower(replica.Type) == endpointReplicaType { + // Parse the replica URL to check if it's valid + replicaURL, err := url.Parse(replica.URL) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to parse URL: %v\n", service.Name, replica.URL, err) + continue + } - // Make HTTP client - var transport http.RoundTripper = &http.Transport{ - // Enable/disable SSL verification - TLSClientConfig: &tls.Config{InsecureSkipVerify: !replica.SSLVerify}, - } - client := &http.Client{ - Transport: transport, - Timeout: time.Second * 20, - } + // Make request to get service's definition (including token) from cluster + req, err := http.NewRequest(http.MethodPost, replicaURL.String(), bytes.NewBuffer(eventJSON)) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to make request: %v\n", service.Name, replica.URL, err) + continue + } - // Send the request - res, err := client.Do(req) - if err != nil { - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to send request: %v\n", service.Name, replica.URL, err) - continue - } + // Add Headers + for k, v := range replica.Headers { + req.Header.Add(k, v) + } - // Check status code - if res.StatusCode == http.StatusOK { - logger.Printf("Job successfully delegated to endpoint \"%s\"\n", replica.URL) - return nil - } - logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": Status code %d\n", service.Name, replica.URL, res.StatusCode) + // Make HTTP client + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !replica.SSLVerify}, } + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + res, err := client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to send request: %v\n", service.Name, replica.URL, err) + continue + } + + // Check status code + if res.StatusCode == http.StatusOK { + logger.Printf("Job successfully delegated to endpoint \"%s\"\n", replica.URL) + return nil + } + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": Status code %d\n", service.Name, replica.URL, res.StatusCode) } - } else { - fmt.Println("Error by Storage_Provider empty.") } + //} else { + // fmt.Println("Error by Storage_Provider empty.") + //} return fmt.Errorf("unable to delegate job from service \"%s\" to any replica, scheduling in the current cluster", service.Name) } From 6d901e2f40adf34f08fd795b26c7ab5da9b0e80f Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 7 Feb 2025 10:32:05 +0100 Subject: [PATCH 100/106] fix error with mutex --- pkg/resourcemanager/delegate.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index e391d44b..1e59702d 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -31,7 +31,8 @@ import ( "sort" "strconv" "strings" - "sync" + + //"sync" "time" "github.com/grycap/oscar/v3/pkg/types" @@ -46,7 +47,7 @@ const ( // tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] var tokenCache = map[string]map[string]string{} -var mutex sync.Mutex +//var mutex sync.Mutex // DelegatedEvent wraps the original input event by adding the storage provider ID type DelegatedEvent struct { @@ -258,8 +259,8 @@ func reorganizeIfNearby(alternatives []Alternative, distances []float64, thresho func DelegateJob(service *types.Service, event string, logger *log.Logger) error { //Block access before executing the function - mutex.Lock() - defer mutex.Unlock() + //mutex.Lock() + //defer mutex.Unlock() //Determine priority level of each replica to delegate if service.Delegation == "topsis" { @@ -354,7 +355,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error req1, err := http.NewRequest("GET", JobURL.String(), nil) if err != nil { - fmt.Printf("Error al crear la solicitud para %s: %v\n", cred.URL, err) + fmt.Printf("Error creating request for %s: %v\n", cred.URL, err) results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } @@ -367,13 +368,12 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error // Add service token to the request req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) - // Realizar la solicitud HTTP - + // Make the HTTP request start := time.Now() resp1, err := client.Do(req1) duration := time.Since(start) if err != nil { - //fmt.Printf("Error al realizar la solicitud para %s: %v\n", cred.URL, err) + //fmt.Printf("Error making request for %s: %v\n", cred.URL, err) results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) continue } From 81127b904b729f0a8b118a6fcaf75baab6040ee6 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Thu, 13 Feb 2025 13:04:16 +0100 Subject: [PATCH 101/106] decoding json in topsis --- .../.ipynb_checkpoints/delegate-checkpoint.go | 997 ++++++++++++++++++ pkg/resourcemanager/delegate.go | 1 + 2 files changed, 998 insertions(+) create mode 100644 pkg/resourcemanager/.ipynb_checkpoints/delegate-checkpoint.go diff --git a/pkg/resourcemanager/.ipynb_checkpoints/delegate-checkpoint.go b/pkg/resourcemanager/.ipynb_checkpoints/delegate-checkpoint.go new file mode 100644 index 00000000..1e59702d --- /dev/null +++ b/pkg/resourcemanager/.ipynb_checkpoints/delegate-checkpoint.go @@ -0,0 +1,997 @@ +/* +Copyright (C) GRyCAP - I3M - UPV + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resourcemanager + +import ( + "bytes" + "crypto/tls" + "encoding/json" + "fmt" + "io" + "log" + "math" + "math/rand" + "net/http" + "net/url" + "path" + "sort" + "strconv" + "strings" + + //"sync" + "time" + + "github.com/grycap/oscar/v3/pkg/types" +) + +const ( + oscarReplicaType = "oscar" + endpointReplicaType = "endpoint" + noDelegateCode = 101 +) + +// tokenCache map to store tokens from services and endpoints -> [CLUSTER_ENDPOINT][SERVICE_NAME] +var tokenCache = map[string]map[string]string{} + +//var mutex sync.Mutex + +// DelegatedEvent wraps the original input event by adding the storage provider ID +type DelegatedEvent struct { + StorageProviderID string `json:"storage_provider"` + Event string `json:"event"` +} + +type GeneralInfo struct { + NumberNodes int64 `json:"numberNodes"` + CPUFreeTotal int64 `json:"cpuFreeTotal"` + CPUMaxFree int64 `json:"cpuMaxFree"` + MemoryFreeTotal int64 `json:"memoryFreeTotal"` + MemoryMaxFree int64 `json:"memoryMaxFree"` + DetailsNodes []NodeInfo `json:"detail"` +} + +type NodeInfo struct { + NodeName string `json:"nodeName"` + CPUCapacity string `json:"cpuCapacity"` + CPUUsage string `json:"cpuUsage"` + CPUPercentage string `json:"cpuPercentage"` + MemoryCapacity string `json:"memoryCapacity"` + MemoryUsage string `json:"memoryUsage"` + MemoryPercentage string `json:"memoryPercentage"` +} + +type Alternative struct { + Index int // Número de la alternativa + Preference float64 // Valor de la preferencia +} + +type JobStatus struct { + Status string `json:"status"` + CreationTime string `json:"creation_time"` + StartTime string `json:"start_time"` + FinishTime string `json:"finish_time"` +} +type JobStatuses map[string]JobStatus + +// Function to execute TOPSIS method +// Normalizes a column by dividing each value by the square root of the sum of squares. +func normalizeMatrix(matrix [][]float64) [][]float64 { + rows := len(matrix) + cols := len(matrix[0]) + normalized := make([][]float64, rows) + for i := range normalized { + normalized[i] = make([]float64, cols) + } + + for j := 0; j < cols; j++ { + // Calculate the norm (square root of the sum of squares of the column) + add := 0.0 + for i := 0; i < rows; i++ { + add += matrix[i][j] * matrix[i][j] + } + norm := math.Sqrt(add) + // Normalize the values ​​of the column + for i := 0; i < rows; i++ { + normalized[i][j] = matrix[i][j] / norm + } + } + return normalized +} + +// Multiply the normalized matrix by the weights. +func weightMatrix(matrix [][]float64, weight []float64) [][]float64 { + rows := len(matrix) + cols := len(matrix[0]) + weighted := make([][]float64, rows) + for i := range weighted { + weighted[i] = make([]float64, cols) + for j := 0; j < cols; j++ { + weighted[i][j] = matrix[i][j] * weight[j] + } + } + return weighted +} + +// Calculate the ideal and anti-ideal solutions. +func calculateSolutions(matrix [][]float64) (ideal []float64, antiIdeal []float64) { + rows := len(matrix) + cols := len(matrix[0]) + + ideal = make([]float64, cols) + antiIdeal = make([]float64, cols) + + for j := 0; j < cols; j++ { + // If the criterion is minimization (let's assume that the first criterion is the one we want to minimize) + + if j == 0 || j == 4 || j == 5 { + // For the ideal solution, we select the minimum value (instead of the maximum) + ideal[j] = matrix[0][j] + antiIdeal[j] = matrix[0][j] + for i := 0; i < rows; i++ { + if matrix[i][j] < ideal[j] { + ideal[j] = matrix[i][j] + } + if matrix[i][j] > antiIdeal[j] { + antiIdeal[j] = matrix[i][j] + } + } + } else { + // For maximization criteria, we normally use the maximum and minimum values + ideal[j] = matrix[0][j] + antiIdeal[j] = matrix[0][j] + for i := 0; i < rows; i++ { + if matrix[i][j] > ideal[j] { + ideal[j] = matrix[i][j] + } + if matrix[i][j] < antiIdeal[j] { + antiIdeal[j] = matrix[i][j] + } + } + } + } + return ideal, antiIdeal +} + +// Calculate the Euclidean distance between an alternative and the ideal or anti-ideal solution +func calculateDistance(alternative []float64, solution []float64) float64 { + add := 0.0 + for i := 0; i < len(alternative); i++ { + add += (alternative[i] - solution[i]) * (alternative[i] - solution[i]) + } + return math.Sqrt(add) +} + +// Calculate the preference index for each alternative +func calculatePreferences(matrix [][]float64, ideal []float64, antiIdeal []float64) []float64 { + rows := len(matrix) + preferences := make([]float64, rows) + + for i := 0; i < rows; i++ { + distanceIdeal := calculateDistance(matrix[i], ideal) + distanceAntiIdeal := calculateDistance(matrix[i], antiIdeal) + preferences[i] = distanceAntiIdeal / (distanceIdeal + distanceAntiIdeal) + } + return preferences +} + +// Order the alternatives from best to worst according to the preference index +func sortAlternatives(preferences []float64) []Alternative { + alternatives := make([]Alternative, len(preferences)) + + // Create a list of alternatives with their preference indices + for i := 0; i < len(preferences); i++ { + alternatives[i] = Alternative{ + Index: i + 1, // Alternativa 1, 2, etc. + Preference: preferences[i], + } + } + + // Sort the alternatives in descending order of preference + sort.Slice(alternatives, func(i, j int) bool { + return alternatives[i].Preference > alternatives[j].Preference + }) + + return alternatives +} + +func distancesFromBetter(alternatives []Alternative) []float64 { + distances := make([]float64, len(alternatives)-1) + + // Calculate distances with the first element + for i := 1; i < len(alternatives); i++ { + distances[i-1] = math.Abs(alternatives[0].Preference - alternatives[i].Preference) + } + + return distances +} + +// Function to randomly rearrange elements whose distance from the first is less than a threshold, including the first +func reorganizeIfNearby(alternatives []Alternative, distances []float64, threshold float64) []Alternative { + + // List of nearby elements (with distance less than the threshold, including the first element) + nearby := []Alternative{alternatives[0]} + + // Identify the other nearby elements + for i := 0; i < len(distances); i++ { + if distances[i] < threshold { + nearby = append(nearby, alternatives[i+1]) + } + } + + // Randomly shuffle nearby items + //rand.Seed(time.Now().UnixNano()) + rand.Shuffle(len(nearby), func(i, j int) { + nearby[i], nearby[j] = nearby[j], nearby[i] + }) + + // Create a new reorganized alternative list + newAlternatives := []Alternative{} + j := 0 + + // Insert the rearranged or unarranged elements + for i := 0; i < len(alternatives); i++ { + if i == 0 || distances[i-1] < threshold { + newAlternatives = append(newAlternatives, nearby[j]) // Add the rearranged items + j++ + } else { + newAlternatives = append(newAlternatives, alternatives[i]) // Keep non-close elements + } + } + + return newAlternatives +} + +// DelegateJob sends the event to a service's replica +func DelegateJob(service *types.Service, event string, logger *log.Logger) error { + + //Block access before executing the function + //mutex.Lock() + //defer mutex.Unlock() + + //Determine priority level of each replica to delegate + if service.Delegation == "topsis" { + results := [][]float64{} + //ServiceCPU, err := strconv.ParseFloat(service.CPU, 64) + //if err != nil { + // fmt.Println("Error to converter CPU of service to int: ", err) + // continue + //} + for _, cred := range service.Replicas { + + cluster, ok := service.Clusters[cred.ClusterID] + if !ok { + //logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) + continue + } + + // Get token + token, err := getServiceToken(cred, cluster) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Parse the cluster's endpoint URL and add the service's path + JobURL, err := url.Parse(cluster.Endpoint) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + JobURL.Path = path.Join(JobURL.Path, "/system/logs/", cred.ServiceName) + + // Make request to get service's definition (including token) from cluster + req, err := http.NewRequest("GET", JobURL.String(), nil) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Add Headers + for k, v := range cred.Headers { + req.Header.Add(k, v) + } + + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Make HTTP client + + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } + + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + resp, err := client.Do(req) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) // Utilizar io.ReadAll para leer el cuerpo + if err != nil { + fmt.Printf("Error al leer el cuerpo de la respuesta para %s: %v\n", cred.URL, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + var jobStatuses JobStatuses + err = json.Unmarshal(body, &jobStatuses) + if err != nil { + fmt.Println("Error decoding the JSON of the response:", err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + + // Show job statuses + + // Count job statuses + averageExecutionTime, pendingCount := countJobs(jobStatuses) + + JobURL, err = url.Parse(cluster.Endpoint) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + JobURL.Path = path.Join(JobURL.Path, "/system/status/") + req1, err := http.NewRequest("GET", JobURL.String(), nil) + + if err != nil { + fmt.Printf("Error creating request for %s: %v\n", cred.URL, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + + // Add Headers + for k, v := range cred.Headers { + req.Header.Add(k, v) + } + + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Make the HTTP request + start := time.Now() + resp1, err := client.Do(req1) + duration := time.Since(start) + if err != nil { + //fmt.Printf("Error making request for %s: %v\n", cred.URL, err) + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + continue + } + + defer resp1.Body.Close() + var clusterStatus GeneralInfo + err = json.NewDecoder(resp1.Body).Decode(&clusterStatus) + if err != nil { + fmt.Println("Error decoding the JSON of the response:", err) + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + continue + } + + serviceCPU, err := strconv.ParseFloat(service.CPU, 64) + + if err != nil { + fmt.Println("Error converting service CPU to float: ", err) + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + continue + } + + results = createParameters(results, duration, clusterStatus, serviceCPU, averageExecutionTime, float64(pendingCount)) + + } + // Print results as a matrix + fmt.Println("Results matrix:") + for _, row := range results { + fmt.Println(row) + } + + // Criteria weights () + weight := []float64{1, 8, 18, 65, 2, 6} + preferences := topsisMethod(results, weight) + newAlternatives := sortbyThreshold(preferences, 20) + + // Print reordered alternatives + fmt.Println("\nAlternatives reordered by threshold:") + for _, alt := range newAlternatives { + fmt.Printf("Alternative %d: %f\n", alt.Index, alt.Preference) + service.Replicas[alt.Index].Priority = uint(alt.Preference) + } + fmt.Println("Replicas stable to topsis method: ", service.Replicas) + + //fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") + } else { + getClusterStatus(service) + fmt.Println("Replicas: ", service.Replicas) + + // Check if replicas are sorted by priority and sort it if needed + if !sort.IsSorted(service.Replicas) { + sort.Stable(service.Replicas) + fmt.Println("Replicas Stable: ", service.Replicas) + } + } + + fmt.Println("Event : ", event) + + /*delegatedEvent := WrapEvent(service.ClusterID, event) + + eventJSON, err := json.Marshal(delegatedEvent) + if err != nil { + return fmt.Errorf("error marshalling delegated event: %v", err) + }*/ + + storage_provider := service.ClusterID + //Create event depending on delegation level + + eventJSON, provider := eventBuild(event, storage_provider) + fmt.Println("Storage_provider : ", provider) + fmt.Println(string(eventJSON)) + + //if provider != "" { //storatage _provider not empty in the delegation proccess. + + for _, replica := range service.Replicas { + // Manage if replica.Type is "oscar" and have the capacity to receive a service + fmt.Println("Delegation job in ClusterID: ", replica.ClusterID, "with Priority ", replica.Priority) + if strings.ToLower(replica.Type) == oscarReplicaType && replica.Priority < noDelegateCode { + // Check ClusterID is defined in 'Clusters' + fmt.Println("Delegating ...") + cluster, ok := service.Clusters[replica.ClusterID] + if !ok { + logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) + continue + } + + // Get token + token, err := getServiceToken(replica, cluster) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Parse the cluster's endpoint URL and add the service's path + postJobURL, err := url.Parse(cluster.Endpoint) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + continue + } + postJobURL.Path = path.Join(postJobURL.Path, "job", replica.ServiceName) + + // Make request to get service's definition (including token) from cluster + //fmt.Println(string(eventJSON)) + req, err := http.NewRequest(http.MethodPost, postJobURL.String(), bytes.NewBuffer(eventJSON)) + + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Add Headers + for k, v := range replica.Headers { + req.Header.Add(k, v) + } + + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Make HTTP client + + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } + + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + res, err := client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue + } + + // Check status code + if res.StatusCode == http.StatusCreated { + logger.Printf("Job successfully delegated to cluster \"%s\"\n", replica.ClusterID) + return nil + } else if res.StatusCode == http.StatusUnauthorized { + // Retry updating the token + token, err := updateServiceToken(replica, cluster) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + continue + } + // Add service token to the request + req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + + // Send the request + res, err = client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + continue + } + } + log.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": Status code %d\n", service.Name, replica.ClusterID, res.StatusCode) + } + + // Manage if replica.Type is "endpoint" + if strings.ToLower(replica.Type) == endpointReplicaType { + // Parse the replica URL to check if it's valid + replicaURL, err := url.Parse(replica.URL) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to parse URL: %v\n", service.Name, replica.URL, err) + continue + } + + // Make request to get service's definition (including token) from cluster + req, err := http.NewRequest(http.MethodPost, replicaURL.String(), bytes.NewBuffer(eventJSON)) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to make request: %v\n", service.Name, replica.URL, err) + continue + } + + // Add Headers + for k, v := range replica.Headers { + req.Header.Add(k, v) + } + + // Make HTTP client + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !replica.SSLVerify}, + } + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + res, err := client.Do(req) + if err != nil { + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": unable to send request: %v\n", service.Name, replica.URL, err) + continue + } + + // Check status code + if res.StatusCode == http.StatusOK { + logger.Printf("Job successfully delegated to endpoint \"%s\"\n", replica.URL) + return nil + } + logger.Printf("Error delegating job from service \"%s\" to endpoint \"%s\": Status code %d\n", service.Name, replica.URL, res.StatusCode) + } + } + //} else { + // fmt.Println("Error by Storage_Provider empty.") + //} + + return fmt.Errorf("unable to delegate job from service \"%s\" to any replica, scheduling in the current cluster", service.Name) +} + +// WrapEvent wraps an event adding the storage_provider field (from the service's cluster_id) +func WrapEvent(providerID string, event string) DelegatedEvent { + return DelegatedEvent{ + StorageProviderID: providerID, + Event: event, + } +} + +func getServiceToken(replica types.Replica, cluster types.Cluster) (string, error) { + endpoint := strings.Trim(cluster.Endpoint, " /") + _, ok := tokenCache[endpoint] + if ok { + token, ok := tokenCache[endpoint][replica.ServiceName] + if ok && token != "" { + return token, nil + } + } + + return updateServiceToken(replica, cluster) +} + +func updateServiceToken(replica types.Replica, cluster types.Cluster) (string, error) { + // Clear tokenCache if there are more than 500 tokens stored + length := 0 + for _, subMap := range tokenCache { + length += len(subMap) + } + if length > 500 { + tokenCache = map[string]map[string]string{} + } + + // Parse the cluster's endpoint URL and add the service's path + getServiceURL, err := url.Parse(cluster.Endpoint) + if err != nil { + return "", fmt.Errorf("unable to parse cluster endpoint \"%s\": %v", cluster.Endpoint, err) + } + getServiceURL.Path = path.Join(getServiceURL.Path, "system", "services", replica.ServiceName) + + // Make request to get service's definition (including token) from cluster + req, err := http.NewRequest(http.MethodGet, getServiceURL.String(), nil) + if err != nil { + return "", fmt.Errorf("unable to make request to cluster endpoint \"%s\": %v", cluster.Endpoint, err) + } + + // Add cluster's basic auth credentials + req.SetBasicAuth(cluster.AuthUser, cluster.AuthPassword) + + // Make HTTP client + + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + res, err := client.Do(req) + if err != nil { + return "", fmt.Errorf("unable to send request to cluster endpoint \"%s\": %v", cluster.Endpoint, err) + } + + // Check status code (OSCAR always returns 200 if it's OK) + if res.StatusCode != 200 { + return "", fmt.Errorf("error in response from cluster endpoint \"%s\": Status code %d", cluster.Endpoint, res.StatusCode) + } + + // Decode the response body into the info struct + var svc *types.Service + err = json.NewDecoder(res.Body).Decode(&svc) + if err != nil { + return "", fmt.Errorf("error decoding service info from cluster endpoint \"%s\":%v", cluster.Endpoint, err) + } + + // Update (or create) the service's token entry in tokenCache + endpoint := strings.Trim(cluster.Endpoint, " /") + _, ok := tokenCache[endpoint] + if !ok { + // Create empty map if nil + tokenCache[endpoint] = map[string]string{} + } + tokenCache[endpoint][replica.ServiceName] = svc.Token + + return svc.Token, nil +} + +func getClusterStatus(service *types.Service) { + fmt.Println("Process to getClusterStatus function.") + for id, replica := range service.Replicas { + // Manage if replica.Type is "oscar" + if strings.ToLower(replica.Type) == oscarReplicaType { + // Check ClusterID is defined in 'Clusters' + cluster, ok := service.Clusters[replica.ClusterID] + if !ok { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Printf("Error checking to ClusterID \"%s\": Cluster not defined\n", replica.ClusterID) + continue + } + // Parse the cluster's endpoint URL and add the service's path + getStatusURL, err := url.Parse(cluster.Endpoint) + if err != nil { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Printf("Error parsing the cluster's endpoint URL to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", replica.ClusterID, cluster.Endpoint, err) + continue + } + getStatusURL.Path = path.Join(getStatusURL.Path, "system", "status") + + // Make request to get status from cluster + req, err := http.NewRequest(http.MethodGet, getStatusURL.String(), nil) + if err != nil { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Printf("Error making request to ClusterID \"%s\": unable to make request: %v\n", replica.ClusterID, err) + continue + } + // Add cluster's basic auth credentials + req.SetBasicAuth(cluster.AuthUser, cluster.AuthPassword) + + // Make HTTP client + fmt.Println("SSLVerify :", cluster.SSLVerify) + var transport http.RoundTripper = &http.Transport{ + // Enable/disable SSL verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !cluster.SSLVerify}, + } + fmt.Println("Transport : ", transport) + client := &http.Client{ + Transport: transport, + Timeout: time.Second * 20, + } + + // Send the request + res, err := client.Do(req) + fmt.Println("StatusCode : ", res.StatusCode) + if err != nil { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Printf("Error getting cluster status to ClusterID \"%s\": unable to send request: %v\n", replica.ClusterID, err) + continue + } + + // Check status code + if res.StatusCode == http.StatusOK { + fmt.Printf("Successful get of cluster status to ClusterID\"%s\"\n", replica.ClusterID) + + //Convert cluster status response to JSON + var clusterStatus *GeneralInfo + err = json.NewDecoder(res.Body).Decode(&clusterStatus) + if err != nil { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Println("Error decoding the JSON of the response:", err) + continue + } + + // CPU is in miliCPU + // CPU required to deploy the service + serviceCPU, err := strconv.ParseFloat(service.CPU, 64) + if err != nil { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Println("Error to converter CPU of service to int: ", err) + continue + } + fmt.Println("serviceCPU: ", serviceCPU) + maxNodeCPU := float64(clusterStatus.CPUMaxFree) + fmt.Println("maxNodeCPU: ", maxNodeCPU) + //Calculate CPU difference to determine whether to delegate a replica to the cluster + dist := maxNodeCPU - (1000 * serviceCPU) + fmt.Println("CPU difference: ", dist) + + //The priority of delegating the service is set based on the free CPU of the cluster as long as it has free CPU on a node to delegate the service. + if dist >= 0 { + fmt.Println("Resources available in ClusterID", replica.ClusterID) + if service.Delegation == "random" { + randPriority := rand.Intn(noDelegateCode) + service.Replicas[id].Priority = uint(randPriority) + //replica.Priority = uint(randPriority) + fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") + } else if service.Delegation == "load-based" { + //Map the totalClusterCPU range to a smaller range (input range 0 to 32 cpu to output range 100 to 0 priority) + totalClusterCPU := clusterStatus.CPUFreeTotal + mappedCPUPriority := mapToRange(totalClusterCPU, 0, 32000, 100, 0) + service.Replicas[id].Priority = uint(mappedCPUPriority) + //replica.Priority = uint(mappedCPUPriority) + fmt.Println("Priority ", service.Replicas[id].Priority, " with ", service.Delegation, " delegation") + + } else if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + fmt.Println("Error when declaring the type of delegation in ClusterID ", replica.ClusterID) + continue + } + + } else { + fmt.Println("No CPU capacity to delegate job in ClusterID ", replica.ClusterID) + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + continue + } + fmt.Println("Status Cluster ", clusterStatus) + fmt.Println("Priority: ", service.Replicas[id].Priority) + + } else { + if service.Delegation != "static" { + service.Replicas[id].Priority = noDelegateCode + //replica.Priority = noDelegateCode + } + fmt.Printf("Error to get of cluster status to ClusterID\"%s\"\n", replica.ClusterID) + } + + } + } + +} + +func mapToRange(value, minInput, maxInput, maxOutput, minOutput int64) int { + mappedValue := maxOutput - (maxOutput-minOutput)*(value-minInput)/(maxInput-minInput) + mappedInt := int(mappedValue) + if mappedInt > int(maxOutput) { + mappedInt = int(maxOutput) + } + if mappedInt < int(minOutput) { + mappedInt = int(minOutput) + } + + return mappedInt +} + +func topsisMethod(results [][]float64, weight []float64) []float64 { + + // Step 1: Normalize the matrix + matrixNormalized := normalizeMatrix(results) + //fmt.Println("//Normalized matrix: ") + //for _, row := range matrizNormalizada { + // fmt.Println(row) + //} + + // Step 2: Weight the matrix + matrixWeighted := weightMatrix(matrixNormalized, weight) + //fmt.Println("\n//Weighted Matrix:") + //for _, row := range matrizPonderada { + // fmt.Println(row) + //} + + // Step 3: Compute the ideal and anti-ideal solution + ideal, antiIdeal := calculateSolutions(matrixWeighted) + //fmt.Println("\nIdeal Solution:", ideal) + //fmt.Println("Anti-Ideal Solution:", antiIdeal) + + // Step 4: Compute the distances and preference index + preferences := calculatePreferences(matrixWeighted, ideal, antiIdeal) + fmt.Println("\nPreference index:", preferences) + + return preferences + +} + +func sortbyThreshold(preferences []float64, umbral int) []Alternative { + // Step 5: Order alternatives from best to worst + alternativesSort := sortAlternatives(preferences) + + fmt.Println("\nAlternatives ordered from best to worst:") + for _, alt := range alternativesSort { + fmt.Printf("Alternative %d: %f\n", alt.Index, alt.Preference) + + //mapped := mapToRange(int64(alt*100.0), 0, 100, 100, 0) + //fmt.Printf("Original Preference: %.4f -> Mapped %d\n", alt, mapped) + } + + distancesFromBetter := distancesFromBetter(alternativesSort) + + // Threshold to reorder nearby elements + f := float64(umbral) / 100.0 + threshold := alternativesSort[0].Preference * f + fmt.Printf("The threshold is the %d %% of the best value: %f ", umbral, threshold) + + // Randomly reorder elements whose distance is less than the threshold, including the first one + newAlternatives := reorganizeIfNearby(alternativesSort, distancesFromBetter, threshold) + + var priority_map int + for id, alt := range newAlternatives { + //fmt.Printf("Alternative %d: %d\n", alt.Index, int(alt.Preference*100)) + priority_map = mapToRange(int64(alt.Preference*100.0), 0, 100, 100, 0) + newAlternatives[id].Preference = float64(priority_map) + //fmt.Printf("Alternative %d: %f\n", alt.Index, newAlternatives[id].Preference) + } + + return newAlternatives + +} + +func countJobs(jobStatuses map[string]JobStatus) (float64, int) { + totalJobs := 0 + succeededCount := 0 + failedCount := 0 + pendingCount := 0 + totalExecutionTime := 0.0 + for _, status := range jobStatuses { + totalJobs++ + switch status.Status { + case "Succeeded": + succeededCount++ + creationTime, _ := time.Parse(time.RFC3339, status.CreationTime) + finishTime, _ := time.Parse(time.RFC3339, status.FinishTime) + duration := finishTime.Sub(creationTime).Seconds() // Duration in seconds + totalExecutionTime += duration + case "Failed": + failedCount++ + case "Pending": // Pending jobs + pendingCount++ + } + } + + var averageExecutionTime float64 = 1e6 + if succeededCount > 0 { + averageExecutionTime = totalExecutionTime / float64(succeededCount) + } + return averageExecutionTime, pendingCount + +} + +func createParameters(results [][]float64, duration time.Duration, clusterStatus GeneralInfo, serviceCPU float64, averageExecutionTime float64, pendingCount float64) [][]float64 { + maxNodeCPU := float64(clusterStatus.CPUMaxFree) + dist := maxNodeCPU - (1000 * serviceCPU) + + if dist >= 0 { + results = append(results, []float64{ + duration.Seconds(), // Latency (ms) + float64(clusterStatus.NumberNodes), // Number of nodes + float64(clusterStatus.MemoryFreeTotal), // Total Memory Free + float64(clusterStatus.CPUFreeTotal), // Total CPU Free + averageExecutionTime, // averageExecutionTime + pendingCount + 0.1, //pendingCount + // More criteria can be added here if needed + }) + } else { + results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) + } + return results +} + +func eventBuild(event string, storage_provider string) ([]byte, string) { + fmt.Println("eventBuild Function...") + var eventMap map[string]interface{} + var cluster_storage string + err := json.Unmarshal([]byte(event), &eventMap) + if err != nil { + fmt.Println("Error to read the event:", err) + return nil, "" + } + //fmt.Println(len(eventMap)) + var eventJSON []byte + if storage, exists := eventMap["storage_provider"]; exists { + fmt.Println("The 'storage_provider' field exists in the event ") + eventValue := eventMap["event"] + //eventString, _ := json.Marshal(eventValue) + + //delegatedEvent1 := WrapEvent(storage.(string), string(eventString)) + delegatedEvent1 := WrapEvent(storage.(string), eventValue.(string)) + fmt.Println("New DelegatedEvent:", delegatedEvent1) + + k, err1 := json.Marshal(delegatedEvent1) + + //k, err1 := json.Marshal(event) + if err1 != nil { + fmt.Printf("error marshalling delegated event: %v ", err1) + return nil, "" + } + + eventJSON = k + cluster_storage = storage.(string) + + } else { + fmt.Println("The 'storage_provider' field does NOT exist in the event") + + delegatedEvent := WrapEvent(storage_provider, event) + fmt.Println("New DelegatedEvent:", delegatedEvent) + + z, err2 := json.Marshal(delegatedEvent) + if err2 != nil { + fmt.Printf("error marshalling delegated event: %v", err2) + return nil, "" + } + eventJSON = z + cluster_storage = storage_provider + } + + //fmt.Println(string(eventJson)) + return eventJSON, cluster_storage +} diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 1e59702d..59fbfa6c 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -334,6 +334,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error continue } var jobStatuses JobStatuses + fmt.Println(body) err = json.Unmarshal(body, &jobStatuses) if err != nil { fmt.Println("Error decoding the JSON of the response:", err) From 8f18deb63558edf43804a41e74be09d68877a96f Mon Sep 17 00:00:00 2001 From: vicente87 Date: Thu, 13 Feb 2025 13:19:15 +0100 Subject: [PATCH 102/106] resp.Body in jobStatuses --- pkg/resourcemanager/delegate.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 59fbfa6c..3da36902 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -334,7 +334,8 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error continue } var jobStatuses JobStatuses - fmt.Println(body) + fmt.Println(cred.ServiceName) + fmt.Println(resp.Body) err = json.Unmarshal(body, &jobStatuses) if err != nil { fmt.Println("Error decoding the JSON of the response:", err) From be8a3b9d398514c7d6d2420d6ff0c03809f93633 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Thu, 13 Feb 2025 13:27:27 +0100 Subject: [PATCH 103/106] jobURL in JobStatuses --- pkg/resourcemanager/delegate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 3da36902..877d6c6e 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -334,7 +334,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error continue } var jobStatuses JobStatuses - fmt.Println(cred.ServiceName) + fmt.Println(JobURL.String()) fmt.Println(resp.Body) err = json.Unmarshal(body, &jobStatuses) if err != nil { From af369fbe591c35d98878f69a21de84b0f4e4f0ac Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 14 Feb 2025 11:06:27 +0100 Subject: [PATCH 104/106] correction error with jobStatuses --- pkg/resourcemanager/delegate.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 877d6c6e..acc8fca0 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -275,6 +275,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error cluster, ok := service.Clusters[cred.ClusterID] if !ok { //logger.Printf("Error delegating service \"%s\" to ClusterID \"%s\": Cluster not defined\n", service.Name, replica.ClusterID) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } @@ -282,6 +283,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error token, err := getServiceToken(cred, cluster) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": %v\n", service.Name, replica.ClusterID, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } @@ -289,6 +291,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error JobURL, err := url.Parse(cluster.Endpoint) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } JobURL.Path = path.Join(JobURL.Path, "/system/logs/", cred.ServiceName) @@ -297,6 +300,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error req, err := http.NewRequest("GET", JobURL.String(), nil) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } @@ -324,18 +328,17 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error resp, err := client.Do(req) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) // Utilizar io.ReadAll para leer el cuerpo + body, err := io.ReadAll(resp.Body) // io.ReadAll-> read body request if err != nil { - fmt.Printf("Error al leer el cuerpo de la respuesta para %s: %v\n", cred.URL, err) + fmt.Printf("Error to read body request to %s: %v\n", cred.URL, err) results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } var jobStatuses JobStatuses - fmt.Println(JobURL.String()) - fmt.Println(resp.Body) err = json.Unmarshal(body, &jobStatuses) if err != nil { fmt.Println("Error decoding the JSON of the response:", err) @@ -351,6 +354,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error JobURL, err = url.Parse(cluster.Endpoint) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } JobURL.Path = path.Join(JobURL.Path, "/system/status/") @@ -445,7 +449,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error eventJSON, provider := eventBuild(event, storage_provider) fmt.Println("Storage_provider : ", provider) - fmt.Println(string(eventJSON)) + //fmt.Println(string(eventJSON)) //if provider != "" { //storatage _provider not empty in the delegation proccess. From 9a62dae1d0ecb0d1f7aeaf4b072dcca523c56895 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 14 Feb 2025 11:27:01 +0100 Subject: [PATCH 105/106] topsis without jobStatuses --- pkg/resourcemanager/delegate.go | 124 +++++++++++++++++--------------- 1 file changed, 65 insertions(+), 59 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index acc8fca0..89a72758 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -21,7 +21,8 @@ import ( "crypto/tls" "encoding/json" "fmt" - "io" + + //"io" "log" "math" "math/rand" @@ -79,14 +80,14 @@ type Alternative struct { Preference float64 // Valor de la preferencia } -type JobStatus struct { +/**type JobStatus struct { Status string `json:"status"` CreationTime string `json:"creation_time"` StartTime string `json:"start_time"` FinishTime string `json:"finish_time"` } type JobStatuses map[string]JobStatus - +**/ // Function to execute TOPSIS method // Normalizes a column by dividing each value by the square root of the sum of squares. func normalizeMatrix(matrix [][]float64) [][]float64 { @@ -294,6 +295,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) continue } + JobURL.Path = path.Join(JobURL.Path, "/system/logs/", cred.ServiceName) // Make request to get service's definition (including token) from cluster @@ -323,34 +325,34 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error Transport: transport, Timeout: time.Second * 20, } - - // Send the request - resp, err := client.Do(req) - if err != nil { - //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) - results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) - continue - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) // io.ReadAll-> read body request - if err != nil { - fmt.Printf("Error to read body request to %s: %v\n", cred.URL, err) - results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) - continue - } - var jobStatuses JobStatuses - err = json.Unmarshal(body, &jobStatuses) - if err != nil { - fmt.Println("Error decoding the JSON of the response:", err) - results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) - continue - } - - // Show job statuses - - // Count job statuses - averageExecutionTime, pendingCount := countJobs(jobStatuses) - + /** + // Send the request + resp, err := client.Do(req) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) // io.ReadAll-> read body request + if err != nil { + fmt.Printf("Error to read body request to %s: %v\n", cred.URL, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + var jobStatuses JobStatuses + err = json.Unmarshal(body, &jobStatuses) + if err != nil { + fmt.Println("Error decoding the JSON of the response:", err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + + // Show job statuses + + // Count job statuses + averageExecutionTime, pendingCount := countJobs(jobStatuses) + **/ JobURL, err = url.Parse(cluster.Endpoint) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) @@ -400,8 +402,8 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) continue } - - results = createParameters(results, duration, clusterStatus, serviceCPU, averageExecutionTime, float64(pendingCount)) + results = createParameters(results, duration, clusterStatus, serviceCPU, 1e6, 1e6) + //results = createParameters(results, duration, clusterStatus, serviceCPU, averageExecutionTime, float64(pendingCount)) } // Print results as a matrix @@ -902,36 +904,40 @@ func sortbyThreshold(preferences []float64, umbral int) []Alternative { } -func countJobs(jobStatuses map[string]JobStatus) (float64, int) { - totalJobs := 0 - succeededCount := 0 - failedCount := 0 - pendingCount := 0 - totalExecutionTime := 0.0 - for _, status := range jobStatuses { - totalJobs++ - switch status.Status { - case "Succeeded": - succeededCount++ - creationTime, _ := time.Parse(time.RFC3339, status.CreationTime) - finishTime, _ := time.Parse(time.RFC3339, status.FinishTime) - duration := finishTime.Sub(creationTime).Seconds() // Duration in seconds - totalExecutionTime += duration - case "Failed": - failedCount++ - case "Pending": // Pending jobs - pendingCount++ +/* +* + + func countJobs(jobStatuses map[string]JobStatus) (float64, int) { + totalJobs := 0 + succeededCount := 0 + failedCount := 0 + pendingCount := 0 + totalExecutionTime := 0.0 + for _, status := range jobStatuses { + totalJobs++ + switch status.Status { + case "Succeeded": + succeededCount++ + creationTime, _ := time.Parse(time.RFC3339, status.CreationTime) + finishTime, _ := time.Parse(time.RFC3339, status.FinishTime) + duration := finishTime.Sub(creationTime).Seconds() // Duration in seconds + totalExecutionTime += duration + case "Failed": + failedCount++ + case "Pending": // Pending jobs + pendingCount++ + } } - } - var averageExecutionTime float64 = 1e6 - if succeededCount > 0 { - averageExecutionTime = totalExecutionTime / float64(succeededCount) - } - return averageExecutionTime, pendingCount + var averageExecutionTime float64 = 1e6 + if succeededCount > 0 { + averageExecutionTime = totalExecutionTime / float64(succeededCount) + } + return averageExecutionTime, pendingCount } - +* +*/ func createParameters(results [][]float64, duration time.Duration, clusterStatus GeneralInfo, serviceCPU float64, averageExecutionTime float64, pendingCount float64) [][]float64 { maxNodeCPU := float64(clusterStatus.CPUMaxFree) dist := maxNodeCPU - (1000 * serviceCPU) From 9eb3a41b5e2b7a7a9d8876fcdea77a2d14c042c1 Mon Sep 17 00:00:00 2001 From: vicente87 Date: Fri, 14 Feb 2025 11:57:30 +0100 Subject: [PATCH 106/106] change req in jobStatus --- pkg/resourcemanager/delegate.go | 132 ++++++++++++++++---------------- 1 file changed, 64 insertions(+), 68 deletions(-) diff --git a/pkg/resourcemanager/delegate.go b/pkg/resourcemanager/delegate.go index 89a72758..cc430aa3 100644 --- a/pkg/resourcemanager/delegate.go +++ b/pkg/resourcemanager/delegate.go @@ -22,7 +22,7 @@ import ( "encoding/json" "fmt" - //"io" + "io" "log" "math" "math/rand" @@ -80,14 +80,14 @@ type Alternative struct { Preference float64 // Valor de la preferencia } -/**type JobStatus struct { +type JobStatus struct { Status string `json:"status"` CreationTime string `json:"creation_time"` StartTime string `json:"start_time"` FinishTime string `json:"finish_time"` } type JobStatuses map[string]JobStatus -**/ + // Function to execute TOPSIS method // Normalizes a column by dividing each value by the square root of the sum of squares. func normalizeMatrix(matrix [][]float64) [][]float64 { @@ -299,7 +299,7 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error JobURL.Path = path.Join(JobURL.Path, "/system/logs/", cred.ServiceName) // Make request to get service's definition (including token) from cluster - req, err := http.NewRequest("GET", JobURL.String(), nil) + req2, err := http.NewRequest("GET", JobURL.String(), nil) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to make request: %v\n", service.Name, replica.ClusterID, err) results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) @@ -308,11 +308,11 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error // Add Headers for k, v := range cred.Headers { - req.Header.Add(k, v) + req2.Header.Add(k, v) } // Add service token to the request - req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + req2.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) // Make HTTP client @@ -325,34 +325,34 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error Transport: transport, Timeout: time.Second * 20, } - /** - // Send the request - resp, err := client.Do(req) - if err != nil { - //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) - results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) - continue - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) // io.ReadAll-> read body request - if err != nil { - fmt.Printf("Error to read body request to %s: %v\n", cred.URL, err) - results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) - continue - } - var jobStatuses JobStatuses - err = json.Unmarshal(body, &jobStatuses) - if err != nil { - fmt.Println("Error decoding the JSON of the response:", err) - results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) - continue - } - - // Show job statuses - - // Count job statuses - averageExecutionTime, pendingCount := countJobs(jobStatuses) - **/ + + // Send the request + resp2, err := client.Do(req2) + if err != nil { + //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to send request: %v\n", service.Name, replica.ClusterID, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + defer resp2.Body.Close() + body, err := io.ReadAll(resp2.Body) // io.ReadAll-> read body request + if err != nil { + fmt.Printf("Error to read body request to %s: %v\n", cred.URL, err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + var jobStatuses JobStatuses + err = json.Unmarshal(body, &jobStatuses) + if err != nil { + fmt.Println("Error decoding the JSON of the response:", err) + results = append(results, []float64{20, 0, 0, 0, 1e6, 1e6}) + continue + } + + // Show job statuses + + // Count job statuses + averageExecutionTime, pendingCount := countJobs(jobStatuses) + JobURL, err = url.Parse(cluster.Endpoint) if err != nil { //logger.Printf("Error delegating job from service \"%s\" to ClusterID \"%s\": unable to parse cluster endpoint \"%s\": %v\n", service.Name, replica.ClusterID, cluster.Endpoint, err) @@ -370,11 +370,11 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error // Add Headers for k, v := range cred.Headers { - req.Header.Add(k, v) + req1.Header.Add(k, v) } // Add service token to the request - req.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) + req1.Header.Add("Authorization", "Bearer "+strings.TrimSpace(token)) // Make the HTTP request start := time.Now() @@ -402,8 +402,8 @@ func DelegateJob(service *types.Service, event string, logger *log.Logger) error results = append(results, []float64{duration.Seconds(), 0, 0, 0, 1e6, 1e6}) continue } - results = createParameters(results, duration, clusterStatus, serviceCPU, 1e6, 1e6) - //results = createParameters(results, duration, clusterStatus, serviceCPU, averageExecutionTime, float64(pendingCount)) + //results = createParameters(results, duration, clusterStatus, serviceCPU, 1e6, 1e6) + results = createParameters(results, duration, clusterStatus, serviceCPU, averageExecutionTime, float64(pendingCount)) } // Print results as a matrix @@ -904,40 +904,36 @@ func sortbyThreshold(preferences []float64, umbral int) []Alternative { } -/* -* - - func countJobs(jobStatuses map[string]JobStatus) (float64, int) { - totalJobs := 0 - succeededCount := 0 - failedCount := 0 - pendingCount := 0 - totalExecutionTime := 0.0 - for _, status := range jobStatuses { - totalJobs++ - switch status.Status { - case "Succeeded": - succeededCount++ - creationTime, _ := time.Parse(time.RFC3339, status.CreationTime) - finishTime, _ := time.Parse(time.RFC3339, status.FinishTime) - duration := finishTime.Sub(creationTime).Seconds() // Duration in seconds - totalExecutionTime += duration - case "Failed": - failedCount++ - case "Pending": // Pending jobs - pendingCount++ - } +func countJobs(jobStatuses map[string]JobStatus) (float64, int) { + totalJobs := 0 + succeededCount := 0 + failedCount := 0 + pendingCount := 0 + totalExecutionTime := 0.0 + for _, status := range jobStatuses { + totalJobs++ + switch status.Status { + case "Succeeded": + succeededCount++ + creationTime, _ := time.Parse(time.RFC3339, status.CreationTime) + finishTime, _ := time.Parse(time.RFC3339, status.FinishTime) + duration := finishTime.Sub(creationTime).Seconds() // Duration in seconds + totalExecutionTime += duration + case "Failed": + failedCount++ + case "Pending": // Pending jobs + pendingCount++ } + } - var averageExecutionTime float64 = 1e6 - if succeededCount > 0 { - averageExecutionTime = totalExecutionTime / float64(succeededCount) - } - return averageExecutionTime, pendingCount + var averageExecutionTime float64 = 1e6 + if succeededCount > 0 { + averageExecutionTime = totalExecutionTime / float64(succeededCount) + } + return averageExecutionTime, pendingCount } -* -*/ + func createParameters(results [][]float64, duration time.Duration, clusterStatus GeneralInfo, serviceCPU float64, averageExecutionTime float64, pendingCount float64) [][]float64 { maxNodeCPU := float64(clusterStatus.CPUMaxFree) dist := maxNodeCPU - (1000 * serviceCPU)

    escW4tXDkeR%Yv*&5agT9krZP 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

  • VYT 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 diff --git a/docs/images/oidc/egi-checkin-token-portal.png b/docs/images/oidc/egi-checkin-token-portal.png deleted file mode 100644 index 41e0d08b2db4da6e5817c208c0add36e55938836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87620 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