From ca88047312352a9e594697c234ca0bea53029d97 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 17 Mar 2024 15:06:00 +0100 Subject: [PATCH] fix: allow multiple PIP_SECRETS --- .../windmill-worker/src/python_executor.rs | 46 ++++++++++++------- .../(root)/(logged)/workers/+page.svelte | 28 ----------- 2 files changed, 29 insertions(+), 45 deletions(-) diff --git a/backend/windmill-worker/src/python_executor.rs b/backend/windmill-worker/src/python_executor.rs index fb3f43f77f..5e7c7f4962 100644 --- a/backend/windmill-worker/src/python_executor.rs +++ b/backend/windmill-worker/src/python_executor.rs @@ -595,24 +595,36 @@ async fn replace_pip_secret( job_id: &Uuid, ) -> error::Result { if PIP_SECRET_VARIABLE.is_match(req) { - let capture = PIP_SECRET_VARIABLE.captures(req); - let variable = capture.unwrap().get(1).unwrap().as_str(); - if !variable.contains("/PIP_SECRET_") { - return Err(error::Error::InternalErr(format!( - "invalid secret variable in pip requirements, (last part of path ma): {}", - req - ))); + let mut joined = "".to_string(); + for req in req.lines() { + let nreq = if PIP_SECRET_VARIABLE.is_match(req) { + let capture = PIP_SECRET_VARIABLE.captures(req); + let variable = capture.unwrap().get(1).unwrap().as_str(); + if !variable.contains("/PIP_SECRET_") { + return Err(error::Error::InternalErr(format!( + "invalid secret variable in pip requirements, (last part of path ma): {}", + req + ))); + } + let secret = get_secret_value_as_admin(db, w_id, variable).await?; + tracing::info!( + worker_name = %worker_name, + job_id = %job_id, + workspace_id = %w_id, + "found secret variable in pip requirements: {}", + req + ); + PIP_SECRET_VARIABLE + .replace(req, secret.as_str()) + .to_string() + } else { + req.to_string() + }; + joined.push_str(&nreq); + joined.push_str("\n"); } - let secret = get_secret_value_as_admin(db, w_id, variable).await?; - tracing::info!( - worker_name = %worker_name, - job_id = %job_id, - workspace_id = %w_id, - "found secret variable in pip requirements: {}", - req - ); - let req = PIP_SECRET_VARIABLE.replace(req, secret.as_str()); - Ok(req.to_string()) + + Ok(joined) } else { Ok(req.to_string()) } diff --git a/frontend/src/routes/(root)/(logged)/workers/+page.svelte b/frontend/src/routes/(root)/(logged)/workers/+page.svelte index 79d8253b55..6203b3a984 100644 --- a/frontend/src/routes/(root)/(logged)/workers/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/workers/+page.svelte @@ -8,7 +8,6 @@ import Cell from '$lib/components/table/Cell.svelte' import DataTable from '$lib/components/table/DataTable.svelte' import Head from '$lib/components/table/Head.svelte' - import Toggle from '$lib/components/Toggle.svelte' import Tooltip from '$lib/components/Tooltip.svelte' import WorkspaceGroup from '$lib/components/WorkspaceGroup.svelte' import { WORKER_S3_BUCKET_SYNC_SETTING } from '$lib/consts' @@ -118,33 +117,6 @@ > {#if $superadmin}
-
- { - try { - console.log('Setting global cache to', e.detail) - await SettingService.setGlobal({ - key: WORKER_S3_BUCKET_SYNC_SETTING, - requestBody: { value: e.detail } - }) - globalCache = e.detail - } catch (err) { - sendUserToast(`Could not set global cache: ${err}`, true) - } - }} - options={{ right: 'global cache to s3' }} - size="sm" - disabled={!$enterpriseLicense || $enterpriseLicense.endsWith('_pro')} - /> -

global cache to s3 is an enterprise feature that enable workers to do fast cold start - and share a single cache backed by s3 for pip dependencies. -

require S3_CACHE_BUCKET to be set and has NO effect otherwise (even if this setting - is on)
-
{