Initial
This commit is contained in:
@@ -60,6 +60,22 @@ export const hostSchema = z.object({
|
||||
tags: z.array(z.string()).default([]),
|
||||
notes: z.string().optional(),
|
||||
visibility: visibilitySchema.default('shared'),
|
||||
groupId: z.string().nullable().optional(),
|
||||
sourceType: z.enum(['manual', 'vmware']).optional().default('manual'),
|
||||
sourceConnectionId: z.string().nullable().optional(),
|
||||
sourceRef: z.string().max(300).optional().default('')
|
||||
});
|
||||
|
||||
export const vcenterConnectionSchema = z.object({
|
||||
name: z.string().min(1).max(120),
|
||||
baseUrl: z.string().url(),
|
||||
username: z.string().min(1).max(200),
|
||||
password: z.string().optional().default(''),
|
||||
apiMode: z.enum(['auto', 'api', 'rest']).optional().default('auto'),
|
||||
requestTimeoutMs: z.coerce.number().int().min(1000).max(120000).optional().default(20000),
|
||||
allowUntrustedTls: z.boolean().optional().default(false),
|
||||
enabled: z.boolean().optional().default(true),
|
||||
visibility: visibilitySchema.default('shared'),
|
||||
groupId: z.string().nullable().optional()
|
||||
});
|
||||
|
||||
@@ -70,6 +86,7 @@ const vcenterFilterSchema = z.object({
|
||||
});
|
||||
|
||||
export const vcenterPreviewSchema = z.object({
|
||||
connectionId: z.string().nullable().optional(),
|
||||
filter: vcenterFilterSchema.optional().default({}),
|
||||
limit: z.coerce.number().int().min(1).max(500).optional().default(100)
|
||||
});
|
||||
@@ -84,6 +101,23 @@ export const vcenterImportSchema = vcenterPreviewSchema.extend({
|
||||
tags: z.array(z.string().max(80)).optional().default([])
|
||||
});
|
||||
|
||||
export const hostGroupRuleSchema = z.object({
|
||||
field: z.enum(['name', 'fqdn', 'address', 'tags', 'transport', 'sourceType', 'osFamily']).default('name'),
|
||||
operator: z.enum(['contains', 'equals', 'startsWith', 'endsWith']).default('contains'),
|
||||
value: z.string().min(1).max(200)
|
||||
});
|
||||
|
||||
export const hostGroupSchema = z.object({
|
||||
name: z.string().min(1).max(160),
|
||||
description: z.string().max(600).optional().default(''),
|
||||
mode: z.enum(['manual', 'dynamic']).default('manual'),
|
||||
matchMode: z.enum(['all', 'any']).optional().default('all'),
|
||||
rules: z.array(hostGroupRuleSchema).optional().default([]),
|
||||
hostIds: z.array(z.string()).optional().default([]),
|
||||
visibility: visibilitySchema.default('shared'),
|
||||
groupId: z.string().nullable().optional()
|
||||
});
|
||||
|
||||
export const folderSchema = z.object({
|
||||
parentId: z.string().nullable().optional(),
|
||||
name: z.string().min(1),
|
||||
@@ -310,8 +344,11 @@ const scriptPayloadSchema = z.object({
|
||||
});
|
||||
|
||||
export const scriptTestRunSchema = z.object({
|
||||
hostId: z.string().min(1),
|
||||
hostId: z.string().optional().default(''),
|
||||
hostGroupId: z.string().optional().default(''),
|
||||
credentialId: z.string().min(1)
|
||||
}).refine((value) => Boolean(value.hostId || value.hostGroupId), {
|
||||
message: 'Choose a host or host group.'
|
||||
});
|
||||
|
||||
const runPlanPayloadSchema = z.object({
|
||||
@@ -323,7 +360,8 @@ const runPlanPayloadSchema = z.object({
|
||||
groupId: z.string().nullable().optional(),
|
||||
group_id: z.string().nullable().optional(),
|
||||
parallel: z.boolean().or(z.number()).default(true),
|
||||
hostIds: z.array(z.string()).optional()
|
||||
hostIds: z.array(z.string()).optional(),
|
||||
hostGroupIds: z.array(z.string()).optional()
|
||||
});
|
||||
|
||||
export function normalizeScriptPayload(body) {
|
||||
@@ -347,6 +385,7 @@ export function normalizeRunPlanPayload(body) {
|
||||
visibility: parsed.visibility,
|
||||
groupId: parsed.visibility === 'group' ? parsed.groupId ?? parsed.group_id ?? null : null,
|
||||
parallel: Boolean(parsed.parallel),
|
||||
hostIds: parsed.hostIds || []
|
||||
hostIds: parsed.hostIds || [],
|
||||
hostGroupIds: parsed.hostGroupIds || []
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user