From 30d4fc84a9e940d1d07e1f25856eb6fa13da9ba1 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Thu, 27 Aug 2026 22:33:12 +0800 Subject: [PATCH] =?UTF-8?q?perf(tencent-clb):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=85=BE=E8=AE=AF=E4=BA=91CLB=E9=83=A8=E7=BD=B2=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E5=9C=B0=E5=9F=9F=E9=80=89=E6=8B=A9=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=94=B9=E4=B8=BA=E8=BF=9C=E7=A8=8B=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E9=80=89=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ui/certd-server/src/configuration.ts | 1 + .../src/plugins/plugin-lib/tencent/access.ts | 2 +- .../plugin/deploy-to-clb/index.test.ts | 29 +++++++ .../plugin/deploy-to-clb/index.ts | 75 ++++++++++--------- 4 files changed, 72 insertions(+), 35 deletions(-) diff --git a/packages/ui/certd-server/src/configuration.ts b/packages/ui/certd-server/src/configuration.ts index efd81f899..d90bf03c1 100644 --- a/packages/ui/certd-server/src/configuration.ts +++ b/packages/ui/certd-server/src/configuration.ts @@ -46,6 +46,7 @@ process.on("uncaughtException", error => { // log() // } // startHeapLog(); + @Configuration({ detectorOptions: { ignore: ["**/plugins/**"], diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/tencent/access.ts b/packages/ui/certd-server/src/plugins/plugin-lib/tencent/access.ts index d7ab5f0dc..ee9be4f86 100644 --- a/packages/ui/certd-server/src/plugins/plugin-lib/tencent/access.ts +++ b/packages/ui/certd-server/src/plugins/plugin-lib/tencent/access.ts @@ -87,7 +87,7 @@ export class TencentAccess extends BaseAccess { buildEndpoint(endpoint: string) { // 改成 xxx.intl.tencentcloudapi.com - return `${endpoint.replace(".tencentcloudapi.com", "")}${this.intlDomain()}tencentcloudapi.com`; + return `${endpoint.replace("tencentcloudapi.com", "")}${this.intlDomain()}tencentcloudapi.com`; } async getCallerIdentity() { diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.test.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.test.ts index 1f5086fc4..8c064addc 100644 --- a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.test.ts +++ b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.test.ts @@ -4,6 +4,35 @@ import assert from "node:assert/strict"; import { DeployCertToTencentCLB } from "./index.js"; describe("DeployCertToTencentCLB", () => { + it("uses a remote single-select input for the CLB region", () => { + const input = (DeployCertToTencentCLB as any).define.input; + + assert.equal(input.region.component.name, "remote-select"); + assert.equal(input.region.component.single, true); + assert.equal(input.region.component.action, "onGetRegionList"); + assert.equal(input.region.required, true); + }); + + it("returns CLB regions with their API endpoints", async () => { + const plugin = new DeployCertToTencentCLB(); + + const options = await plugin.onGetRegionList({}); + + assert.deepEqual(options[0], { + value: "default", + label: "就近地域接入(推荐,只支持非金融区)", + endpoint: "clb.tencentcloudapi.com", + }); + assert.deepEqual( + options.find(item => item.value === "ap-shanghai-fsi"), + { + value: "ap-shanghai-fsi", + label: "华东地区(上海金融)", + endpoint: "clb.ap-shanghai-fsi.tencentcloudapi.com", + } + ); + }); + it("uses remote single-select inputs for CLB and HTTPS listener", () => { const input = (DeployCertToTencentCLB as any).define.input; diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.ts index 4737e69b9..0d13d82d2 100644 --- a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-clb/index.ts @@ -3,6 +3,29 @@ import dayjs from "dayjs"; import { TencentAccess } from "../../../plugin-lib/tencent/index.js"; import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert"; import { createRemoteSelectInputDefine } from "@certd/plugin-lib"; + +const clbRegionOptions = [ + { value: "default", label: "就近地域接入(推荐,只支持非金融区)", endpoint: "clb.tencentcloudapi.com" }, + { value: "ap-guangzhou", label: "华南地区(广州)", endpoint: "clb.ap-guangzhou.tencentcloudapi.com" }, + { value: "ap-shanghai", label: "华东地区(上海)", endpoint: "clb.ap-shanghai.tencentcloudapi.com" }, + { value: "ap-nanjing", label: "华东地区(南京)", endpoint: "clb.ap-nanjing.tencentcloudapi.com" }, + { value: "ap-beijing", label: "华北地区(北京)", endpoint: "clb.ap-beijing.tencentcloudapi.com" }, + { value: "ap-chengdu", label: "西南地区(成都)", endpoint: "clb.ap-chengdu.tencentcloudapi.com" }, + { value: "ap-chongqing", label: "西南地区(重庆)", endpoint: "clb.ap-chongqing.tencentcloudapi.com" }, + { value: "ap-hongkong", label: "港澳台地区(中国香港)", endpoint: "clb.ap-hongkong.tencentcloudapi.com" }, + { value: "ap-singapore", label: "亚太东南(新加坡)", endpoint: "clb.ap-singapore.tencentcloudapi.com" }, + { value: "ap-jakarta", label: "亚太东南(雅加达)", endpoint: "clb.ap-jakarta.tencentcloudapi.com" }, + { value: "ap-bangkok", label: "亚太东南(曼谷)", endpoint: "clb.ap-bangkok.tencentcloudapi.com" }, + { value: "ap-seoul", label: "亚太东北(首尔)", endpoint: "clb.ap-seoul.tencentcloudapi.com" }, + { value: "ap-tokyo", label: "亚太东北(东京)", endpoint: "clb.ap-tokyo.tencentcloudapi.com" }, + { value: "na-ashburn", label: "美国东部(弗吉尼亚)", endpoint: "clb.na-ashburn.tencentcloudapi.com" }, + { value: "na-siliconvalley", label: "美国西部(硅谷)", endpoint: "clb.na-siliconvalley.tencentcloudapi.com" }, + { value: "sa-saopaulo", label: "南美地区(圣保罗)", endpoint: "clb.sa-saopaulo.tencentcloudapi.com" }, + { value: "eu-frankfurt", label: "欧洲地区(法兰克福)", endpoint: "clb.eu-frankfurt.tencentcloudapi.com" }, + { value: "ap-shanghai-fsi", label: "华东地区(上海金融)", endpoint: "clb.ap-shanghai-fsi.tencentcloudapi.com" }, + { value: "ap-shenzhen-fsi", label: "华南地区(深圳金融)", endpoint: "clb.ap-shenzhen-fsi.tencentcloudapi.com" }, +]; + @IsTaskPlugin({ name: "DeployCertToTencentCLB", title: "腾讯云-部署到CLB", @@ -41,37 +64,16 @@ export class DeployCertToTencentCLB extends AbstractTaskPlugin { }) accessId!: string; - @TaskInput({ - title: "大区", - component: { - name: "a-auto-complete", - vModel: "value", - options: [ - { value: "ap-guangzhou" }, - { value: "ap-beijing" }, - { value: "ap-chengdu" }, - { value: "ap-chongqing" }, - { value: "ap-hongkong" }, - { value: "ap-jakarta" }, - { value: "ap-mumbai" }, - { value: "ap-nanjing" }, - { value: "ap-seoul" }, - { value: "ap-shanghai" }, - { value: "ap-shanghai-fsi" }, - { value: "ap-shenzhen-fsi" }, - { value: "ap-singapore" }, - { value: "ap-tokyo" }, - { value: "eu-frankfurt" }, - { value: "na-ashburn" }, - { value: "na-siliconvalley" }, - { value: "na-toronto" }, - { value: "sa-saopaulo" }, - { value: "ap-taipei" }, - ], - helper: "如果列表中没有,您可以手动输入", - }, - required: true, - }) + @TaskInput( + createRemoteSelectInputDefine({ + title: "大区", + helper: "请选择CLB地域", + action: DeployCertToTencentCLB.prototype.onGetRegionList.name, + single: true, + pager: false, + search: false, + }) + ) region!: string; @TaskInput( @@ -130,16 +132,17 @@ export class DeployCertToTencentCLB extends AbstractTaskPlugin { const accessProvider = (await this.getAccess(this.accessId)) as TencentAccess; - const region = this.region; + const regionOption = clbRegionOptions.find(item => item.value === this.region); + const endpoint = regionOption?.endpoint || "clb.tencentcloudapi.com"; const clientConfig = { credential: { secretId: accessProvider.secretId, secretKey: accessProvider.secretKey, }, - region: region, + region: this.region === "default" ? "" : this.region, profile: { httpProfile: { - endpoint: `clb.${accessProvider.intlDomain()}tencentcloudapi.com`, + endpoint: accessProvider.buildEndpoint(endpoint), }, }, }; @@ -147,6 +150,10 @@ export class DeployCertToTencentCLB extends AbstractTaskPlugin { return new ClbClient(clientConfig); } + async onGetRegionList(data: PageSearch) { + return clbRegionOptions; + } + async execute(): Promise { const client = this.client;