diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index 9a70a774..2d7ba43f 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -1448,6 +1448,18 @@ func deployK8sWorker(image string, identifier string, env []string) error { } } + existing, err := clientset.AppsV1().Deployments(kubernetesNamespace).List(ctx, metav1.ListOptions{ + LabelSelector: "app.kubernetes.io/name=shuffle-worker", + }) + if err != nil { + log.Printf("[ERROR] Failed listing existing deployments: %v", err) + } + + if len(existing.Items) > 0 { + log.Printf("[INFO] Found existing deployments, skipping creation") + return nil + } + replicaNumberInt32 := int32(replicaNumber) // worker makes authenticated requests to the k8s api to create app deployments. // Therefore, it needs to have access to the service account token. diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 09adbaab..40d61544 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -413,6 +413,8 @@ func deployk8sApp(image string, identifier string, env []string) error { kubernetesNamespace = "default" } + ctx := context.Background() + log.Printf("[DEBUG] Deploying k8s app with identifier %s to namespace %s", identifier, kubernetesNamespace) deployport, err := strconv.Atoi(os.Getenv("SHUFFLE_APP_EXPOSED_PORT")) if err != nil { @@ -624,6 +626,21 @@ func deployk8sApp(image string, identifier string, env []string) error { } } + existing, err := clientset.AppsV1().Deployments(kubernetesNamespace).List( + ctx, + metav1.ListOptions{ + LabelSelector: fmt.Sprintf("app: %s", name), + }, + ) + if err != nil { + log.Printf("[ERROR] Failed listing existing deployments: %v", err) + } + + if len(existing.Items) > 0 { + log.Printf("[INFO] Found existing deployments, skipping creation") + return nil + } + replicaNumberInt32 := int32(replicaNumber) // apps do not need access the k8s api. automountServiceAccountToken := false