fix: 修复上传证书到腾讯云失败的bug

pull/21/merge
xiaojunnuo 2023-07-10 11:52:38 +08:00
parent 14de21ee64
commit e950322232
9 changed files with 68 additions and 13 deletions

View File

@ -88,7 +88,7 @@ export type Pipeline = Runnable & {
userId: any; userId: any;
stages: Stage[]; stages: Stage[];
triggers: Trigger[]; triggers: Trigger[];
notifications: Notification[]; notifications?: Notification[];
}; };
export type Context = { export type Context = {

View File

@ -1,6 +1,7 @@
import { IAccessService } from "@certd/pipeline"; import { EmailSend, IAccessService, IEmailService } from "@certd/pipeline";
import { AliyunAccess } from "@certd/plugin-aliyun"; import { AliyunAccess } from "@certd/plugin-aliyun";
import { aliyunSecret } from "../user.secret"; import { aliyunSecret } from "../user.secret";
export class AccessServiceTest implements IAccessService { export class AccessServiceTest implements IAccessService {
async getById(id: any): Promise<any> { async getById(id: any): Promise<any> {
return { return {
@ -8,3 +9,10 @@ export class AccessServiceTest implements IAccessService {
} as AliyunAccess; } as AliyunAccess;
} }
} }
export class EmailServiceTest implements IEmailService {
send(email: EmailSend): Promise<void> {
console.log("send email", email);
return Promise.resolve(undefined);
}
}

View File

@ -58,6 +58,17 @@ export const pipeline: Pipeline = {
runStrategy: RunStrategy.SkipWhenSucceed, runStrategy: RunStrategy.SkipWhenSucceed,
}, },
}, },
{
id: generateId(),
title: "上传证书到腾讯云",
type: "EchoPlugin",
input: {
cert: "cert",
},
strategy: {
runStrategy: RunStrategy.SkipWhenSucceed,
},
},
], ],
}, },
], ],

View File

@ -1,7 +1,7 @@
import "mocha"; import "mocha";
import { Executor, FileStorage, RunHistory } from "@certd/pipeline"; import { Executor, FileStorage, RunHistory } from "@certd/pipeline";
import { pipeline } from "./pipeline.define"; import { pipeline } from "./pipeline.define";
import { AccessServiceTest } from "./access-service-test"; import { AccessServiceTest, EmailServiceTest } from "./access-service-test";
import "../../src"; import "../../src";
import "../plugin/echo-plugin"; import "../plugin/echo-plugin";
@ -13,7 +13,14 @@ describe("pipeline", function () {
console.log("changed:"); console.log("changed:");
} }
const executor = new Executor({ userId: "test", pipeline, onChanged, accessService: new AccessServiceTest(), storage: new FileStorage() }); const executor = new Executor({
userId: "test",
pipeline,
onChanged,
accessService: new AccessServiceTest(),
emailService: new EmailServiceTest(),
storage: new FileStorage(),
});
await executor.run(1, "user"); await executor.run(1, "user");
// expect(define.name).eq("EchoPlugin"); // expect(define.name).eq("EchoPlugin");
}); });

View File

@ -7,13 +7,20 @@ import { IsAccess, AccessInput } from "@certd/pipeline";
}) })
export class DnspodAccess { export class DnspodAccess {
@AccessInput({ @AccessInput({
title: "token", title: "端点",
component: { component: {
placeholder: "开放接口token", placeholder: "endpoint",
name: "a-select",
vModel: "value",
options: [
{ value: "https://dnsapi.cn", label: "中国站" },
{ value: "https://api.dnspod.com", label: "国际站" },
],
}, },
rules: [{ required: true, message: "该项必填" }], rules: [{ required: true, message: "该项必填" }],
}) })
token = ""; endpoint = "";
@AccessInput({ @AccessInput({
title: "账户id", title: "账户id",
component: { component: {
@ -22,6 +29,15 @@ export class DnspodAccess {
rules: [{ required: true, message: "该项必填" }], rules: [{ required: true, message: "该项必填" }],
}) })
id = ""; id = "";
@AccessInput({
title: "token",
component: {
placeholder: "开放接口token",
},
rules: [{ required: true, message: "该项必填" }],
})
token = "";
} }
new DnspodAccess(); new DnspodAccess();

View File

@ -20,9 +20,11 @@ export class DnspodDnsProvider implements IDnsProvider {
loginToken: any; loginToken: any;
endpoint = "";
async onInstance() { async onInstance() {
const access: DnspodAccess = this.access as DnspodAccess; const access: DnspodAccess = this.access as DnspodAccess;
this.loginToken = access.id + "," + access.token; this.loginToken = access.id + "," + access.token;
this.endpoint = access.endpoint || "https://dnsapi.cn";
} }
async doRequest(options: any, successCodes: string[] = []) { async doRequest(options: any, successCodes: string[] = []) {
@ -51,7 +53,7 @@ export class DnspodDnsProvider implements IDnsProvider {
async getDomainList() { async getDomainList() {
const ret = await this.doRequest({ const ret = await this.doRequest({
url: "https://dnsapi.cn/Domain.List", url: this.access.endpoint + "/Domain.List",
}); });
this.logger.debug("dnspod 域名列表:", ret.domains); this.logger.debug("dnspod 域名列表:", ret.domains);
return ret.domains; return ret.domains;
@ -66,7 +68,7 @@ export class DnspodDnsProvider implements IDnsProvider {
const ret = await this.doRequest( const ret = await this.doRequest(
{ {
url: "https://dnsapi.cn/Record.Create", url: this.access.endpoint + "/Record.Create",
formData: { formData: {
domain, domain,
sub_domain: rr, sub_domain: rr,
@ -87,7 +89,7 @@ export class DnspodDnsProvider implements IDnsProvider {
const domain = await this.matchDomain(fullRecord); const domain = await this.matchDomain(fullRecord);
const ret = await this.doRequest({ const ret = await this.doRequest({
url: "https://dnsapi.cn/Record.Remove", url: this.access.endpoint + "/Record.Remove",
formData: { formData: {
domain, domain,
record_id: record.id, record_id: record.id,

View File

@ -47,6 +47,17 @@ export class DeployToCdnPlugin extends AbstractTaskPlugin {
}) })
domainName!: string; domainName!: string;
@TaskInput({
title: "CDN接口",
helper: "CDN接口端点",
component: {
name: "a-select",
type: "tencent",
},
required: true,
})
endpoint!: string;
accessService!: IAccessService; accessService!: IAccessService;
logger!: ILogger; logger!: ILogger;

View File

@ -87,7 +87,7 @@ export class DeployCertToTencentTKEIngressPlugin extends AbstractTaskPlugin {
this.logger = this.ctx.logger; this.logger = this.ctx.logger;
} }
async execute(): Promise<void> { async execute(): Promise<void> {
const accessProvider = this.accessService.getById(this.accessId); const accessProvider = await this.accessService.getById(this.accessId);
const tkeClient = this.getTkeClient(accessProvider, this.region); const tkeClient = this.getTkeClient(accessProvider, this.region);
const kubeConfigStr = await this.getTkeKubeConfig(tkeClient, this.clusterId); const kubeConfigStr = await this.getTkeKubeConfig(tkeClient, this.clusterId);

View File

@ -52,7 +52,7 @@ export class UploadToTencentPlugin extends AbstractTaskPlugin {
async execute(): Promise<void> { async execute(): Promise<void> {
const { accessId, name, cert } = this; const { accessId, name, cert } = this;
const accessProvider = this.accessService.getById(accessId); const accessProvider = await this.accessService.getById(accessId);
const certName = this.appendTimeSuffix(name || cert.domain); const certName = this.appendTimeSuffix(name || cert.domain);
const client = this.getClient(accessProvider); const client = this.getClient(accessProvider);
@ -96,7 +96,7 @@ export class UploadToTencentPlugin extends AbstractTaskPlugin {
// async rollback({ input }) { // async rollback({ input }) {
// const { accessId } = input; // const { accessId } = input;
// const accessProvider = this.accessService.getById(accessId); // const accessProvider = await this.accessService.getById(accessId);
// const client = this.getClient(accessProvider); // const client = this.getClient(accessProvider);
// //
// const { tencentCertId } = context; // const { tencentCertId } = context;