Skip to content

Commit fc08e0b

Browse files
author
延枚
committed
Add VM deploy order MCP tools for flow operations
Change-Id: Ic6228d4e7f4ddebc7c81fd8c9b918142a47cacdb Co-developed-by: iFlow <[email protected]>
1 parent 0cd4e2f commit fc08e0b

File tree

7 files changed

+451
-3
lines changed

7 files changed

+451
-3
lines changed

common/types.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,17 @@ export {
144144
TagGroupSchema,
145145
TagSchema,
146146
TagGroupWithTagsSchema,
147-
BaseTagSchema
147+
BaseTagSchema,
148+
149+
// VM Deploy Order schemas
150+
StopVMDeployOrderSchema,
151+
SkipVMDeployMachineSchema,
152+
RetryVMDeployMachineSchema,
153+
ResumeVMDeployOrderSchema,
154+
GetVMDeployOrderSchema,
155+
GetVMDeployMachineLogSchema,
156+
DeployOrderSchema,
157+
DeployOrderLogSchema
148158
} from "../operations/flow/types.js";
149159

150160
// Packages types

operations/flow/types.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,96 @@ export type DeleteTagParams = z.infer<typeof DeleteTagSchema>;
529529
export type UpdateTagParams = z.infer<typeof UpdateTagSchema>;
530530
export type GetTagGroupParams = z.infer<typeof GetTagGroupSchema>;
531531

532+
// VM Deploy Order schemas
533+
export const DeployOrderMachineActionSchema = z.object({
534+
type: z.string().nullable().optional().describe("类型 RetryVMDeployMachine重试机器部署 SkipVMDeployMachine跳过机器部署 LogVMDeployMachine查看机器部署日志"),
535+
disable: z.boolean().nullable().optional().describe("当前用户是否有权限进行后续 action"),
536+
params: z.object({}).nullable().optional().describe("参数"),
537+
});
538+
539+
export const DeployOrderMachineSchema = z.object({
540+
createTime: z.number().int().nullable().optional().describe("创建时间"),
541+
updateTime: z.number().int().nullable().optional().describe("更新时间"),
542+
status: z.string().nullable().optional().describe("状态 Success成功 Pending待部署 Running部署中 Cancelled取消 Queued部署等待中 Failed失败 Skipped已跳过"),
543+
machineSn: z.string().nullable().optional().describe("机器sn"),
544+
clientStatus: z.string().nullable().optional().describe("机器状态 ok(正常) error(连接失败)"),
545+
ip: z.string().nullable().optional().describe("机器ip"),
546+
batchNum: z.number().int().nullable().optional().describe("部署批次"),
547+
actions: z.array(DeployOrderMachineActionSchema).nullable().optional().describe("操作列表"),
548+
});
549+
550+
export const DeployOrderDeployMachinesSchema = z.object({
551+
hostGroupId: z.number().int().nullable().optional().describe("主机组Id"),
552+
batchNum: z.number().int().nullable().optional().describe("发布批次"),
553+
deployMachines: z.array(DeployOrderMachineSchema).nullable().optional().describe("部署机器列表"),
554+
});
555+
556+
export const DeployOrderActionSchema = z.object({
557+
type: z.string().nullable().optional().describe("类型 StopVMDeployOrder 取消部署单 ResumeVMDeployOrder 继续部署单运行"),
558+
disable: z.boolean().nullable().optional().describe("当前用户是否有权限进行后续 action"),
559+
params: z.object({}).nullable().optional().describe("参数"),
560+
});
561+
562+
export const DeployOrderSchema = z.object({
563+
deployOrderId: z.number().int().nullable().optional().describe("部署单id"),
564+
createTime: z.number().int().nullable().optional().describe("创建时间"),
565+
updateTime: z.number().int().nullable().optional().describe("更新时间"),
566+
creator: z.string().nullable().optional().describe("创建人"),
567+
currentBatch: z.number().int().nullable().optional().describe("当前发布批次"),
568+
totalBatch: z.number().int().nullable().optional().describe("总发布批次"),
569+
status: z.string().nullable().optional().describe("发布状态 Waiting暂停 Running部署中 Cancelled已取消 Success成功"),
570+
exceptionCode: z.string().nullable().optional().describe("错误码"),
571+
actions: z.array(DeployOrderActionSchema).nullable().optional().describe("操作列表"),
572+
deployMachineInfo: DeployOrderDeployMachinesSchema.nullable().optional().describe("部署机器信息"),
573+
});
574+
575+
export const DeployOrderLogSchema = z.object({
576+
deployLog: z.string().nullable().optional().describe("部署日志"),
577+
aliyunRegion: z.string().nullable().optional().describe("部署地域"),
578+
deployLogPath: z.string().nullable().optional().describe("部署日志路径"),
579+
deployBeginTime: z.string().nullable().optional().describe("部署开始时间"),
580+
deployEndTime: z.string().nullable().optional().describe("部署结束时间"),
581+
});
582+
583+
// Define base schema for common parameters
584+
export const BaseVMDeployOrderSchema = z.object({
585+
organizationId: z.string().describe("企业Id"),
586+
pipelineId: z.string().describe("流水线Id"),
587+
deployOrderId: z.string().describe("部署单Id"),
588+
});
589+
590+
export const StopVMDeployOrderSchema = BaseVMDeployOrderSchema;
591+
592+
export const SkipVMDeployMachineSchema = BaseVMDeployOrderSchema.extend({
593+
machineSn: z.string().describe("机器sn"),
594+
});
595+
596+
export const RetryVMDeployMachineSchema = BaseVMDeployOrderSchema.extend({
597+
machineSn: z.string().describe("机器sn"),
598+
});
599+
600+
export const ResumeVMDeployOrderSchema = BaseVMDeployOrderSchema;
601+
602+
export const GetVMDeployOrderSchema = BaseVMDeployOrderSchema;
603+
604+
export const GetVMDeployMachineLogSchema = BaseVMDeployOrderSchema.extend({
605+
machineSn: z.string().describe("机器sn"),
606+
});
607+
608+
// VM Deploy Order type exports
609+
export type DeployOrderMachineAction = z.infer<typeof DeployOrderMachineActionSchema>;
610+
export type DeployOrderMachine = z.infer<typeof DeployOrderMachineSchema>;
611+
export type DeployOrderDeployMachines = z.infer<typeof DeployOrderDeployMachinesSchema>;
612+
export type DeployOrderAction = z.infer<typeof DeployOrderActionSchema>;
613+
export type DeployOrder = z.infer<typeof DeployOrderSchema>;
614+
export type DeployOrderLog = z.infer<typeof DeployOrderLogSchema>;
615+
export type StopVMDeployOrderParams = z.infer<typeof StopVMDeployOrderSchema>;
616+
export type SkipVMDeployMachineParams = z.infer<typeof SkipVMDeployMachineSchema>;
617+
export type RetryVMDeployMachineParams = z.infer<typeof RetryVMDeployMachineSchema>;
618+
export type ResumeVMDeployOrderParams = z.infer<typeof ResumeVMDeployOrderSchema>;
619+
export type GetVMDeployOrderParams = z.infer<typeof GetVMDeployOrderSchema>;
620+
export type GetVMDeployMachineLogParams = z.infer<typeof GetVMDeployMachineLogSchema>;
621+
532622
// Flow type exports
533623
export type PipelineDetail = z.infer<typeof PipelineDetailSchema>;
534624
export type PipelineListItem = z.infer<typeof PipelineListItemSchema>;

operations/flow/vmDeployOrder.ts

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
import * as utils from "../../common/utils.js";
2+
import { z } from "zod";
3+
4+
// 定义VM部署单相关的Zod模式
5+
export const DeployOrderMachineActionSchema = z.object({
6+
type: z.string().nullable().optional().describe("类型 RetryVMDeployMachine重试机器部署 SkipVMDeployMachine跳过机器部署 LogVMDeployMachine查看机器部署日志"),
7+
disable: z.boolean().nullable().optional().describe("当前用户是否有权限进行后续 action"),
8+
params: z.object({}).nullable().optional().describe("参数"),
9+
});
10+
11+
export const DeployOrderMachineSchema = z.object({
12+
createTime: z.number().int().nullable().optional().describe("创建时间"),
13+
updateTime: z.number().int().nullable().optional().describe("更新时间"),
14+
status: z.string().nullable().optional().describe("状态 Success成功 Pending待部署 Running部署中 Cancelled取消 Queued部署等待中 Failed失败 Skipped已跳过"),
15+
machineSn: z.string().nullable().optional().describe("机器sn"),
16+
clientStatus: z.string().nullable().optional().describe("机器状态 ok(正常) error(连接失败)"),
17+
ip: z.string().nullable().optional().describe("机器ip"),
18+
batchNum: z.number().int().nullable().optional().describe("部署批次"),
19+
actions: z.array(DeployOrderMachineActionSchema).nullable().optional().describe("操作列表"),
20+
});
21+
22+
export const DeployOrderDeployMachinesSchema = z.object({
23+
hostGroupId: z.number().int().nullable().optional().describe("主机组Id"),
24+
batchNum: z.number().int().nullable().optional().describe("发布批次"),
25+
deployMachines: z.array(DeployOrderMachineSchema).nullable().optional().describe("部署机器列表"),
26+
});
27+
28+
export const DeployOrderActionSchema = z.object({
29+
type: z.string().nullable().optional().describe("类型 StopVMDeployOrder 取消部署单 ResumeVMDeployOrder 继续部署单运行"),
30+
disable: z.boolean().nullable().optional().describe("当前用户是否有权限进行后续 action"),
31+
params: z.object({}).nullable().optional().describe("参数"),
32+
});
33+
34+
export const DeployOrderSchema = z.object({
35+
deployOrderId: z.number().int().nullable().optional().describe("部署单id"),
36+
createTime: z.number().int().nullable().optional().describe("创建时间"),
37+
updateTime: z.number().int().nullable().optional().describe("更新时间"),
38+
creator: z.string().nullable().optional().describe("创建人"),
39+
currentBatch: z.number().int().nullable().optional().describe("当前发布批次"),
40+
totalBatch: z.number().int().nullable().optional().describe("总发布批次"),
41+
status: z.string().nullable().optional().describe("发布状态 Waiting暂停 Running部署中 Cancelled已取消 Success成功"),
42+
exceptionCode: z.string().nullable().optional().describe("错误码"),
43+
actions: z.array(DeployOrderActionSchema).nullable().optional().describe("操作列表"),
44+
deployMachineInfo: DeployOrderDeployMachinesSchema.nullable().optional().describe("部署机器信息"),
45+
});
46+
47+
export const DeployOrderLogSchema = z.object({
48+
deployLog: z.string().nullable().optional().describe("部署日志"),
49+
aliyunRegion: z.string().nullable().optional().describe("部署地域"),
50+
deployLogPath: z.string().nullable().optional().describe("部署日志路径"),
51+
deployBeginTime: z.string().nullable().optional().describe("部署开始时间"),
52+
deployEndTime: z.string().nullable().optional().describe("部署结束时间"),
53+
});
54+
55+
// 定义API请求参数的Zod模式
56+
export const BaseVMDeployOrderSchema = z.object({
57+
organizationId: z.string().describe("企业Id"),
58+
pipelineId: z.string().describe("流水线Id"),
59+
deployOrderId: z.string().describe("部署单Id"),
60+
});
61+
62+
export const StopVMDeployOrderSchema = BaseVMDeployOrderSchema;
63+
64+
export const SkipVMDeployMachineSchema = BaseVMDeployOrderSchema.extend({
65+
machineSn: z.string().describe("机器sn"),
66+
});
67+
68+
export const RetryVMDeployMachineSchema = BaseVMDeployOrderSchema.extend({
69+
machineSn: z.string().describe("机器sn"),
70+
});
71+
72+
export const ResumeVMDeployOrderSchema = BaseVMDeployOrderSchema;
73+
74+
export const GetVMDeployOrderSchema = BaseVMDeployOrderSchema;
75+
76+
export const GetVMDeployMachineLogSchema = BaseVMDeployOrderSchema.extend({
77+
machineSn: z.string().describe("机器sn"),
78+
});
79+
80+
// 定义类型
81+
export type DeployOrderMachineAction = z.infer<typeof DeployOrderMachineActionSchema>;
82+
export type DeployOrderMachine = z.infer<typeof DeployOrderMachineSchema>;
83+
export type DeployOrderDeployMachines = z.infer<typeof DeployOrderDeployMachinesSchema>;
84+
export type DeployOrderAction = z.infer<typeof DeployOrderActionSchema>;
85+
export type DeployOrder = z.infer<typeof DeployOrderSchema>;
86+
export type DeployOrderLog = z.infer<typeof DeployOrderLogSchema>;
87+
export type StopVMDeployOrderParams = z.infer<typeof StopVMDeployOrderSchema>;
88+
export type SkipVMDeployMachineParams = z.infer<typeof SkipVMDeployMachineSchema>;
89+
export type RetryVMDeployMachineParams = z.infer<typeof RetryVMDeployMachineSchema>;
90+
export type ResumeVMDeployOrderParams = z.infer<typeof ResumeVMDeployOrderSchema>;
91+
export type GetVMDeployOrderParams = z.infer<typeof GetVMDeployOrderSchema>;
92+
export type GetVMDeployMachineLogParams = z.infer<typeof GetVMDeployMachineLogSchema>;
93+
94+
/**
95+
* 终止机器部署
96+
* @param organizationId 企业Id
97+
* @param pipelineId 流水线Id
98+
* @param deployOrderId 部署单Id
99+
* @returns 是否成功
100+
*/
101+
export async function stopVMDeployOrderFunc(
102+
organizationId: string,
103+
pipelineId: string,
104+
deployOrderId: string
105+
): Promise<boolean> {
106+
const url = `/oapi/v1/flow/organizations/${organizationId}/pipelines/${pipelineId}/deploy/${deployOrderId}/stop`;
107+
108+
const response = await utils.yunxiaoRequest(url, {
109+
method: "PUT",
110+
});
111+
112+
return Boolean(response);
113+
}
114+
115+
/**
116+
* 跳过机器部署
117+
* @param organizationId 企业Id
118+
* @param pipelineId 流水线Id
119+
* @param deployOrderId 部署单Id
120+
* @param machineSn 机器sn
121+
* @returns 是否成功
122+
*/
123+
export async function skipVMDeployMachineFunc(
124+
organizationId: string,
125+
pipelineId: string,
126+
deployOrderId: string,
127+
machineSn: string
128+
): Promise<boolean> {
129+
const url = `/oapi/v1/flow/organizations/${organizationId}/pipelines/${pipelineId}/deploy/${deployOrderId}/machine/${machineSn}/skip`;
130+
131+
const response = await utils.yunxiaoRequest(url, {
132+
method: "PUT",
133+
});
134+
135+
return Boolean(response);
136+
}
137+
138+
/**
139+
* 重试机器部署
140+
* @param organizationId 企业Id
141+
* @param pipelineId 流水线Id
142+
* @param deployOrderId 部署单Id
143+
* @param machineSn 机器sn
144+
* @returns 是否成功
145+
*/
146+
export async function retryVMDeployMachineFunc(
147+
organizationId: string,
148+
pipelineId: string,
149+
deployOrderId: string,
150+
machineSn: string
151+
): Promise<boolean> {
152+
const url = `/oapi/v1/flow/organizations/${organizationId}/pipelines/${pipelineId}/deploy/${deployOrderId}/machine/${machineSn}/retry`;
153+
154+
const response = await utils.yunxiaoRequest(url, {
155+
method: "PUT",
156+
});
157+
158+
return Boolean(response);
159+
}
160+
161+
/**
162+
* 继续部署单运行
163+
* @param organizationId 企业Id
164+
* @param pipelineId 流水线Id
165+
* @param deployOrderId 部署单Id
166+
* @returns 是否成功
167+
*/
168+
export async function resumeVMDeployOrderFunc(
169+
organizationId: string,
170+
pipelineId: string,
171+
deployOrderId: string
172+
): Promise<boolean> {
173+
const url = `/oapi/v1/flow/organizations/${organizationId}/pipelines/${pipelineId}/deploy/${deployOrderId}/resume`;
174+
175+
const response = await utils.yunxiaoRequest(url, {
176+
method: "PUT",
177+
});
178+
179+
return Boolean(response);
180+
}
181+
182+
/**
183+
* 获取部署单详情
184+
* @param organizationId 企业Id
185+
* @param pipelineId 流水线id
186+
* @param deployOrderId 部署Id
187+
* @returns 部署单详情
188+
*/
189+
export async function getVMDeployOrderFunc(
190+
organizationId: string,
191+
pipelineId: string,
192+
deployOrderId: string
193+
): Promise<DeployOrder> {
194+
const url = `/oapi/v1/flow/organizations/${organizationId}/pipelines/${pipelineId}/deploy/${deployOrderId}`;
195+
196+
const response = await utils.yunxiaoRequest(url, {
197+
method: "GET",
198+
});
199+
200+
return DeployOrderSchema.parse(response);
201+
}
202+
203+
/**
204+
* 查询机器部署日志
205+
* @param organizationId 企业Id
206+
* @param pipelineId 流水线Id
207+
* @param deployOrderId 部署单Id
208+
* @param machineSn 机器sn
209+
* @returns 机器部署日志
210+
*/
211+
export async function getVMDeployMachineLogFunc(
212+
organizationId: string,
213+
pipelineId: string,
214+
deployOrderId: string,
215+
machineSn: string
216+
): Promise<DeployOrderLog> {
217+
const url = `/oapi/v1/flow/organizations/${organizationId}/pipelines/${pipelineId}/deploy/${deployOrderId}/machine/${machineSn}/log`;
218+
219+
const response = await utils.yunxiaoRequest(url, {
220+
method: "GET",
221+
});
222+
223+
return DeployOrderLogSchema.parse(response);
224+
}

tool-handlers/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { handleAppStackChangeOrderTools } from './appstack-change-orders.js';
1616
import { handleEffortTools } from './effort.js';
1717
import { handleResourceMemberTools } from './resourceMember.js';
1818
import { handleTagTools } from './tag.js';
19+
import { handleVMDeployOrderTools } from './vmDeployOrder.js';
1920

2021
export const handleToolRequest = async (request: any) => {
2122
// Try each handler in sequence until one returns a result
@@ -37,7 +38,8 @@ export const handleToolRequest = async (request: any) => {
3738
handleAppStackChangeOrderTools,
3839
handleEffortTools,
3940
handleResourceMemberTools,
40-
handleTagTools
41+
handleTagTools,
42+
handleVMDeployOrderTools
4143
];
4244

4345
for (const handler of handlers) {

0 commit comments

Comments
 (0)