From 07a660ba543db079821f9bf3cc1446399b3b514b Mon Sep 17 00:00:00 2001 From: jingyang <3161362058@qq.com> Date: Wed, 28 Aug 2024 17:16:30 +0800 Subject: [PATCH] feat(applaunchpad): Improve domain handling for legacy and new domains --- .../applaunchpad/src/constants/editApp.ts | 3 +- .../providers/applaunchpad/src/mock/apps.ts | 3 +- .../src/pages/api/platform/getInitData.ts | 7 +- .../src/pages/app/edit/components/Form.tsx | 9 +- .../applaunchpad/src/store/static.ts | 2 + .../providers/applaunchpad/src/types/app.d.ts | 1 + .../applaunchpad/src/types/index.d.ts | 1 + .../providers/applaunchpad/src/utils/adapt.ts | 106 ++---------------- .../applaunchpad/src/utils/deployYaml2Json.ts | 6 +- 9 files changed, 34 insertions(+), 104 deletions(-) diff --git a/frontend/providers/applaunchpad/src/constants/editApp.ts b/frontend/providers/applaunchpad/src/constants/editApp.ts index 48801cbfbfa..25c24670b68 100644 --- a/frontend/providers/applaunchpad/src/constants/editApp.ts +++ b/frontend/providers/applaunchpad/src/constants/editApp.ts @@ -38,7 +38,8 @@ export const defaultEditVal: AppEditType = { protocol: 'HTTP', openPublicDomain: false, publicDomain: '', - customDomain: '' + customDomain: '', + isLegacy: false } ], envs: [], diff --git a/frontend/providers/applaunchpad/src/mock/apps.ts b/frontend/providers/applaunchpad/src/mock/apps.ts index ae0b03fe78e..c8bc5fc5161 100644 --- a/frontend/providers/applaunchpad/src/mock/apps.ts +++ b/frontend/providers/applaunchpad/src/mock/apps.ts @@ -268,7 +268,8 @@ export const MOCK_APP_DETAIL: AppDetailType = { protocol: 'HTTP', openPublicDomain: false, publicDomain: '', - customDomain: '' + customDomain: '', + isLegacy: false } ], envs: [], diff --git a/frontend/providers/applaunchpad/src/pages/api/platform/getInitData.ts b/frontend/providers/applaunchpad/src/pages/api/platform/getInitData.ts index 9bdde7bf9b4..3c785a52706 100644 --- a/frontend/providers/applaunchpad/src/pages/api/platform/getInitData.ts +++ b/frontend/providers/applaunchpad/src/pages/api/platform/getInitData.ts @@ -15,12 +15,14 @@ export type Response = { CURRENCY: Coin; guideEnabled: boolean; fileMangerConfig: FileMangerType; + SEALOS_USER_DOMAIN: string; }; export const defaultAppConfig: AppConfigType = { cloud: { domain: 'cloud.sealos.io', - port: '' + port: '', + userDomain: 'cloud.sealos.io' }, common: { guideEnabled: false, @@ -76,7 +78,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) FORM_SLIDER_LIST_CONFIG: global.AppConfig.launchpad.appResourceFormSliderConfig, guideEnabled: global.AppConfig.common.guideEnabled, fileMangerConfig: global.AppConfig.launchpad.fileManger, - CURRENCY: Coin.shellCoin + CURRENCY: Coin.shellCoin, + SEALOS_USER_DOMAIN: global.AppConfig.cloud.userDomain } }); } catch (error) { diff --git a/frontend/providers/applaunchpad/src/pages/app/edit/components/Form.tsx b/frontend/providers/applaunchpad/src/pages/app/edit/components/Form.tsx index 843871bc4b7..ed1d48f33d8 100644 --- a/frontend/providers/applaunchpad/src/pages/app/edit/components/Form.tsx +++ b/frontend/providers/applaunchpad/src/pages/app/edit/components/Form.tsx @@ -5,7 +5,7 @@ import { defaultSliderKey, ProtocolList } from '@/constants/app'; import { GpuAmountMarkList } from '@/constants/editApp'; import { useToast } from '@/hooks/useToast'; import { useGlobalStore } from '@/store/global'; -import { SEALOS_DOMAIN } from '@/store/static'; +import { SEALOS_DOMAIN, SEALOS_USER_DOMAIN } from '@/store/static'; import { useUserStore } from '@/store/user'; import type { QueryType } from '@/types'; import type { AppEditType } from '@/types/app'; @@ -801,7 +801,8 @@ const Form = ({ protocol: 'HTTP', openPublicDomain: false, publicDomain: '', - customDomain: '' + customDomain: '', + isLegacy: false }) } > @@ -866,7 +867,9 @@ const Form = ({ {network.customDomain ? network.customDomain - : `${network.publicDomain}.${SEALOS_DOMAIN}`} + : `${network.publicDomain}.${ + network.isLegacy ? SEALOS_DOMAIN : SEALOS_USER_DOMAIN + }`} { try { const res = await getInitData(); SEALOS_DOMAIN = res.SEALOS_DOMAIN; + SEALOS_USER_DOMAIN = res.SEALOS_USER_DOMAIN; DOMAIN_PORT = res.DOMAIN_PORT; INGRESS_SECRET = res.INGRESS_SECRET; SHOW_EVENT_ANALYZE = res.SHOW_EVENT_ANALYZE; diff --git a/frontend/providers/applaunchpad/src/types/app.d.ts b/frontend/providers/applaunchpad/src/types/app.d.ts index b8889331587..d2593e41051 100644 --- a/frontend/providers/applaunchpad/src/types/app.d.ts +++ b/frontend/providers/applaunchpad/src/types/app.d.ts @@ -78,6 +78,7 @@ export interface AppEditType { openPublicDomain: boolean; publicDomain: string; // default domain customDomain: string; // custom domain + isLegacy: boolean; }[]; envs: { key: string; diff --git a/frontend/providers/applaunchpad/src/types/index.d.ts b/frontend/providers/applaunchpad/src/types/index.d.ts index 3f700cf0d14..18eb8761250 100644 --- a/frontend/providers/applaunchpad/src/types/index.d.ts +++ b/frontend/providers/applaunchpad/src/types/index.d.ts @@ -27,6 +27,7 @@ export type AppConfigType = { cloud: { domain: string; port?: string; + userDomain: string; }; common: { guideEnabled: boolean; diff --git a/frontend/providers/applaunchpad/src/utils/adapt.ts b/frontend/providers/applaunchpad/src/utils/adapt.ts index bff96e334a9..54b1888bb12 100644 --- a/frontend/providers/applaunchpad/src/utils/adapt.ts +++ b/frontend/providers/applaunchpad/src/utils/adapt.ts @@ -219,7 +219,7 @@ export enum YamlKindEnum { } export const adaptAppDetail = async (configs: DeployKindsType[]): Promise => { - const { SEALOS_DOMAIN } = await getInitData(); + const { SEALOS_DOMAIN, SEALOS_USER_DOMAIN } = await getInitData(); const deployKindsMap: { [YamlKindEnum.StatefulSet]?: V1StatefulSet; [YamlKindEnum.Deployment]?: V1Deployment; @@ -312,21 +312,22 @@ export const adaptAppDetail = async (configs: DeployKindsType[]): Promise { return res as AppEditType; }; -// yaml file adapt to edit form -export const adaptYamlToEdit = (yamlList: string[]) => { - const configs = yamlList.map((item) => yaml.loadAll(item) as DeployKindsType).flat(); - - const deployKindsMap: { - [YamlKindEnum.Deployment]?: V1Deployment; - [YamlKindEnum.Service]?: V1Service; - [YamlKindEnum.ConfigMap]?: V1ConfigMap; - [YamlKindEnum.Ingress]?: V1Ingress; - [YamlKindEnum.HorizontalPodAutoscaler]?: V2HorizontalPodAutoscaler; - [YamlKindEnum.Secret]?: V1Secret; - } = {}; - - configs.forEach((item) => { - if (item.kind) { - // @ts-ignore - deployKindsMap[item.kind] = item; - } - }); - - const domain = deployKindsMap?.Ingress?.spec?.rules?.[0].host; - const cpuStr = - deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.resources?.requests?.cpu; - const memoryStr = - deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.resources?.requests?.memory; - - const res: Record = { - imageName: deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.image, - runCMD: - deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.command?.join(' ') || '', - cmdParam: - deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.args?.join(' ') || '', - replicas: deployKindsMap?.Deployment?.spec?.replicas, - cpu: cpuStr ? cpuFormatToM(cpuStr) : undefined, - memory: memoryStr ? memoryFormatToMi(memoryStr) : undefined, - accessExternal: deployKindsMap?.Ingress - ? { - use: true, - outDomain: domain?.split('.')[0], - selfDomain: domain - } - : undefined, - containerOutPort: - deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.ports?.[0]?.containerPort, - envs: - deployKindsMap?.Deployment?.spec?.template?.spec?.containers?.[0]?.env?.map((env) => ({ - key: env.name, - value: env.value - })) || undefined, - hpa: deployKindsMap.HorizontalPodAutoscaler?.spec - ? { - use: true, - target: - (deployKindsMap.HorizontalPodAutoscaler.spec.metrics?.[0]?.resource - ?.name as HpaTarget) || 'cpu', - value: - deployKindsMap.HorizontalPodAutoscaler.spec.metrics?.[0]?.resource?.target - ?.averageUtilization || 50, - minReplicas: deployKindsMap.HorizontalPodAutoscaler.spec?.maxReplicas, - maxReplicas: deployKindsMap.HorizontalPodAutoscaler.spec?.minReplicas - } - : undefined, - configMapList: deployKindsMap?.ConfigMap?.data - ? Object.entries(deployKindsMap?.ConfigMap.data).map(([key, value]) => ({ - mountPath: key, - value - })) - : undefined, - secret: deployKindsMap.Secret - ? { - ...defaultEditVal.secret, - use: true - } - : undefined - }; - - for (const key in res) { - if (res[key] === undefined) { - delete res[key]; - } - } - - return res; -}; - export const sliderNumber2MarkList = ({ val, type, diff --git a/frontend/providers/applaunchpad/src/utils/deployYaml2Json.ts b/frontend/providers/applaunchpad/src/utils/deployYaml2Json.ts index d477717d8d2..3619dd41b6a 100644 --- a/frontend/providers/applaunchpad/src/utils/deployYaml2Json.ts +++ b/frontend/providers/applaunchpad/src/utils/deployYaml2Json.ts @@ -7,7 +7,7 @@ import { minReplicasKey, publicDomainKey } from '@/constants/app'; -import { INGRESS_SECRET, SEALOS_DOMAIN } from '@/store/static'; +import { INGRESS_SECRET, SEALOS_DOMAIN, SEALOS_USER_DOMAIN } from '@/store/static'; import type { AppEditType } from '@/types/app'; import { pathFormat, pathToNameFormat, str2Num, strToBase64 } from '@/utils/tools'; import dayjs from 'dayjs'; @@ -270,9 +270,11 @@ export const json2Ingress = (data: AppEditType) => { const result = data.networks .filter((item) => item.openPublicDomain) .map((network, i) => { + console.log(network, 'network'); + const host = network.customDomain ? network.customDomain - : `${network.publicDomain}.${SEALOS_DOMAIN}`; + : `${network.publicDomain}.${network.isLegacy ? SEALOS_DOMAIN : SEALOS_USER_DOMAIN}`; const secretName = network.customDomain ? network.networkName : INGRESS_SECRET;