- Add runSmoketest mutation to automate end-to-end verification. - Add SmoketestExecutor and HostDeleter to support automated testing and cleanup. - Extend createHost and importHosts to allow linking templates by name or ID. - Update docs/howtos/cookbook.md with new recipe steps and AI/MCP guidance. - Update .junie/guidelines.md with new verification and deployment standards. - Add src/test/template_link.test.ts and update existing tests to cover new functionality. - Regenerate GraphQL types to match schema updates.
88 lines
2.9 KiB
TypeScript
88 lines
2.9 KiB
TypeScript
import {ZabbixRequest, ParsedArgs, isZabbixErrorResult} from "./zabbix-request.js";
|
|
import {ZabbixAPI} from "./zabbix-api.js";
|
|
import {logger} from "../logging/logger.js";
|
|
|
|
|
|
export interface ZabbixQueryTemplateResponse {
|
|
templateid: string,
|
|
uuid: string,
|
|
name: string,
|
|
}
|
|
|
|
|
|
export class ZabbixQueryTemplatesRequest extends ZabbixRequest<ZabbixQueryTemplateResponse[]> {
|
|
constructor(authToken?: string | null, cookie?: string | null,) {
|
|
super("template.get", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
|
|
export interface ZabbixQueryTemplateGroupResponse {
|
|
groupid: string,
|
|
name: string,
|
|
uuid: string
|
|
}
|
|
|
|
export class ZabbixQueryTemplateGroupRequest extends ZabbixRequest<ZabbixQueryTemplateGroupResponse[]> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("templategroup.get", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
|
|
export class ZabbixCreateTemplateGroupRequest extends ZabbixRequest<{ groupids: string[] }> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("templategroup.create", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
export class ZabbixCreateTemplateRequest extends ZabbixRequest<{ templateids: string[] }> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("template.create", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
export class ZabbixQueryItemRequest extends ZabbixRequest<any[]> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("item.get", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
export class ZabbixCreateItemRequest extends ZabbixRequest<{ itemids: string[] }> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("item.create", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
export class ZabbixDeleteTemplatesRequest extends ZabbixRequest<{ templateids: string[] }> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("template.delete", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
export class ZabbixDeleteTemplateGroupsRequest extends ZabbixRequest<{ groupids: string[] }> {
|
|
constructor(authToken?: string | null, cookie?: string | null) {
|
|
super("templategroup.delete", authToken, cookie);
|
|
}
|
|
}
|
|
|
|
|
|
export class TemplateHelper {
|
|
public static async findTemplateIdsByName(templateNames: string[], zabbixApi: ZabbixAPI, zabbixAuthToken?: string, cookie?: string) {
|
|
let result: number[] = []
|
|
for (let templateName of templateNames) {
|
|
let templates = await new ZabbixQueryTemplatesRequest(zabbixAuthToken, cookie).executeRequestReturnError(zabbixApi, new ParsedArgs({
|
|
filter_name: templateName
|
|
}))
|
|
|
|
if (isZabbixErrorResult(templates) || !templates?.length) {
|
|
logger.error(`Unable to find templateName=${templateName}`)
|
|
return null
|
|
}
|
|
result.push(...templates.map((t) => Number(t.templateid)))
|
|
}
|
|
return result
|
|
}
|
|
}
|
|
|
|
|