From 4fee8c3f1fd42b06715ec408b1e99797268a2e30 Mon Sep 17 00:00:00 2001 From: dvankeke Date: Tue, 12 May 2026 09:56:43 +0200 Subject: [PATCH] fix: remove createworkloadcatalog endpoint --- src/api/v1/createWorkloadCatalog.ts | 15 ---------- src/middleware/session.ts | 4 +-- src/openapi/api.yaml | 24 --------------- src/otomi-stack.ts | 46 +++-------------------------- 4 files changed, 6 insertions(+), 83 deletions(-) delete mode 100644 src/api/v1/createWorkloadCatalog.ts diff --git a/src/api/v1/createWorkloadCatalog.ts b/src/api/v1/createWorkloadCatalog.ts deleted file mode 100644 index c01b85a44..000000000 --- a/src/api/v1/createWorkloadCatalog.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Debug from 'debug' -import { Response } from 'express' -import { OpenApiRequestExt } from 'src/otomi-models' - -const debug = Debug('otomi:api:v1:workloadCatalog') - -/** - * POST /v1/createWorkloadCatalog - * Create workload catalog - */ -export const createWorkloadCatalog = async (req: OpenApiRequestExt, res: Response): Promise => { - debug(`workloadCatalog(${req.body.name})`) - const data = await req.otomi.createWorkloadCatalog(req.body) - res.json(data) -} diff --git a/src/middleware/session.ts b/src/middleware/session.ts index 281b35f8b..8c615e6da 100644 --- a/src/middleware/session.ts +++ b/src/middleware/session.ts @@ -9,8 +9,8 @@ import { OpenApiRequestExt } from 'src/otomi-models' import { default as OtomiStack, rootPath } from 'src/otomi-stack' import { API_NAMESPACE, cleanEnv, EDITOR_INACTIVITY_TIMEOUT } from 'src/validators' import { v4 as uuidv4 } from 'uuid' -import { getSanitizedErrorMessage } from '../utils' import { setApiStatusInConfigMap } from '../k8s-operations' +import { getSanitizedErrorMessage } from '../utils' const debug = Debug('otomi:session') const env = cleanEnv({ @@ -121,7 +121,7 @@ export function sessionMiddleware(server: http.Server): RequestHandler { if (['post', 'put', 'delete'].includes(req.method.toLowerCase())) { // in the workloadCatalog endpoint(s), don't need to create a session - if (req.path === '/v1/workloadCatalog' || req.path === '/v1/createWorkloadCatalog') return next() + if (req.path === '/v1/workloadCatalog') return next() // Block all write operations when the API is locked (git migration completed) if (readOnlyStack?.locked) throw new ApiLockedError() diff --git a/src/openapi/api.yaml b/src/openapi/api.yaml index 6bd339466..4d94166f4 100644 --- a/src/openapi/api.yaml +++ b/src/openapi/api.yaml @@ -2358,30 +2358,6 @@ paths: type: object error: type: string - '/v1/createWorkloadCatalog': - post: - operationId: createWorkloadCatalog - x-eov-operation-handler: v1/createWorkloadCatalog - x-aclSchema: Workload - description: Create workload catalog from a repository - requestBody: - content: - application/json: - schema: - type: object - description: Workload catalog object that contains updated values - required: true - responses: - '400': - $ref: '#/components/responses/BadRequest' - '404': - $ref: '#/components/responses/NotFound' - '200': - description: Successfully updated a team workload catalog - content: - application/json: - schema: - type: object '/v1/teams/{teamId}/workloads': parameters: diff --git a/src/otomi-stack.ts b/src/otomi-stack.ts index 7381f3e43..ba9ab673c 100644 --- a/src/otomi-stack.ts +++ b/src/otomi-stack.ts @@ -1,4 +1,4 @@ -import { CoreV1Api, KubeConfig, User as k8sUser, V1ObjectReference } from '@kubernetes/client-node' +import { CoreV1Api, User as k8sUser, KubeConfig, V1ObjectReference } from '@kubernetes/client-node' import Debug from 'debug' import { getRegions, ObjectStorageKeyRegions, Region, ResourcePage } from '@linode/api-v4' @@ -99,6 +99,8 @@ import { EDITOR_INACTIVITY_TIMEOUT, GIT_BRANCH, GIT_EMAIL, + GIT_INIT_MAX_RETRIES, + GIT_INIT_RETRY_INTERVAL_MS, GIT_LOCAL_PATH, GIT_PASSWORD, GIT_REPO_URL, @@ -111,8 +113,6 @@ import { PREINSTALLED_EXCLUDED_APPS, TOOLS_HOST, VERSIONS, - GIT_INIT_MAX_RETRIES, - GIT_INIT_RETRY_INTERVAL_MS, } from 'src/validators' import { v4 as uuidv4 } from 'uuid' import { parse as parseYaml, stringify as stringifyYaml } from 'yaml' @@ -163,14 +163,7 @@ import { userSecretDataToUser, } from './utils/userUtils' import { defineClusterId, ObjectStorageClient } from './utils/wizardUtils' -import { - fetchChartYaml, - fetchWorkloadCatalog, - isInteralGiteaURL, - NewHelmChartValues, - sparseCloneChart, - validateGitUrl, -} from './utils/workloadUtils' +import { fetchChartYaml, fetchWorkloadCatalog, isInteralGiteaURL, validateGitUrl } from './utils/workloadUtils' interface ExcludedApp extends App { managed: boolean @@ -2015,37 +2008,6 @@ export default class OtomiStack { return await fetchChartYaml(url) } - async createWorkloadCatalog(body: NewHelmChartValues): Promise { - const { gitRepositoryUrl, chartTargetDirName, chartIcon, allowTeams } = body - - const uuid = uuidv4() - const localHelmChartsDir = `/tmp/otomi/charts/${uuid}` - const helmChartCatalogUrl = env.HELM_CHART_CATALOG - const { user, email } = this.git - const { cluster } = await this.getSettings(['cluster']) - - try { - await sparseCloneChart( - gitRepositoryUrl, - localHelmChartsDir, - helmChartCatalogUrl, - user, - email, - chartTargetDirName, - chartIcon, - allowTeams, - cluster?.domainSuffix, - ) - return true - } catch (error) { - debug('Error adding new Helm chart to catalog') - return false - } finally { - // Clean up: if the temporary directory exists, remove it. - if (existsSync(localHelmChartsDir)) rmSync(localHelmChartsDir, { recursive: true, force: true }) - } - } - getTeamWorkloads(teamId: string): Workload[] { return this.getTeamAplWorkloads(teamId).map( (workload) => omit(getV1ObjectFromApl(workload), ['values']) as Workload,