feat: add backup contracts

This commit is contained in:
2026-05-02 21:59:42 +00:00
parent 6191d1cc87
commit 33643e83f7
4 changed files with 167 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
export type TBackupStatus = 'pending' | 'running' | 'ready' | 'failed' | 'restoring' | 'restored';
export type TBackupTrigger = 'manual' | 'scheduled';
export type TBackupResourceType = 'volume' | 'database' | 'objectstorage';
export interface IBackupSnapshotBase {
type: TBackupResourceType;
snapshotId: string;
snapshotName?: string;
originalSize: number;
storedSize: number;
createdAt: number;
tags?: Record<string, string>;
}
export interface IBackupVolumeSnapshot extends IBackupSnapshotBase {
type: 'volume';
volumeName: string;
mountPath: string;
}
export interface IBackupDatabaseSnapshot extends IBackupSnapshotBase {
type: 'database';
resourceName: string;
databaseName: string;
}
export interface IBackupObjectStorageSnapshot extends IBackupSnapshotBase {
type: 'objectstorage';
resourceName: string;
bucketName: string;
}
export type TBackupSnapshot =
| IBackupVolumeSnapshot
| IBackupDatabaseSnapshot
| IBackupObjectStorageSnapshot;
export interface IBackupRestoreEvent {
restoredAt: number;
status: 'restored' | 'failed';
errorText?: string;
}
export interface IBackupRecord {
id: string;
serviceId: string;
serviceName?: string;
clusterId?: string;
status: TBackupStatus;
trigger: TBackupTrigger;
snapshots: TBackupSnapshot[];
createdAt: number;
updatedAt: number;
completedAt?: number;
requestedBy?: string;
errorText?: string;
restoreHistory?: IBackupRestoreEvent[];
tags?: Record<string, string>;
}
+1
View File
@@ -12,6 +12,7 @@ export * from './registry.js';
export * from './secretbundle.js'; export * from './secretbundle.js';
export * from './secretgroup.js'; export * from './secretgroup.js';
export * from './baremetal.js'; export * from './baremetal.js';
export * from './backup.js';
export * from './clusternode.js'; export * from './clusternode.js';
export * from './settings.js'; export * from './settings.js';
export * from './service.js'; export * from './service.js';
+103
View File
@@ -0,0 +1,103 @@
import * as plugins from '../plugins.js';
import type { IBackupRecord, TBackupSnapshot } from '../data/backup.js';
import type { IService } from '../data/service.js';
import type { IIdentity } from '../data/user.js';
export interface IReq_Any_Cloudly_CreateServiceBackup
extends plugins.typedrequestInterfaces.implementsTR<
plugins.typedrequestInterfaces.ITypedRequest,
IReq_Any_Cloudly_CreateServiceBackup
> {
method: 'createServiceBackup';
request: {
identity: IIdentity;
serviceId: string;
clusterId?: string;
tags?: Record<string, string>;
};
response: {
backup: IBackupRecord;
};
}
export interface IReq_Any_Cloudly_GetServiceBackups
extends plugins.typedrequestInterfaces.implementsTR<
plugins.typedrequestInterfaces.ITypedRequest,
IReq_Any_Cloudly_GetServiceBackups
> {
method: 'getServiceBackups';
request: {
identity: IIdentity;
serviceId?: string;
status?: IBackupRecord['status'];
};
response: {
backups: IBackupRecord[];
};
}
export interface IReq_Any_Cloudly_GetBackupById
extends plugins.typedrequestInterfaces.implementsTR<
plugins.typedrequestInterfaces.ITypedRequest,
IReq_Any_Cloudly_GetBackupById
> {
method: 'getBackupById';
request: {
identity: IIdentity;
backupId: string;
};
response: {
backup: IBackupRecord;
};
}
export interface IReq_Any_Cloudly_RestoreServiceBackup
extends plugins.typedrequestInterfaces.implementsTR<
plugins.typedrequestInterfaces.ITypedRequest,
IReq_Any_Cloudly_RestoreServiceBackup
> {
method: 'restoreServiceBackup';
request: {
identity: IIdentity;
backupId: string;
clear?: boolean;
resourceTypes?: Array<TBackupSnapshot['type']>;
};
response: {
backup: IBackupRecord;
};
}
export interface IReq_Cloudly_Coreflow_ExecuteServiceBackup
extends plugins.typedrequestInterfaces.implementsTR<
plugins.typedrequestInterfaces.ITypedRequest,
IReq_Cloudly_Coreflow_ExecuteServiceBackup
> {
method: 'executeServiceBackup';
request: {
backupId: string;
service: IService;
tags?: Record<string, string>;
};
response: {
snapshots: TBackupSnapshot[];
};
}
export interface IReq_Cloudly_Coreflow_ExecuteServiceRestore
extends plugins.typedrequestInterfaces.implementsTR<
plugins.typedrequestInterfaces.ITypedRequest,
IReq_Cloudly_Coreflow_ExecuteServiceRestore
> {
method: 'executeServiceRestore';
request: {
backupId: string;
service: IService;
snapshots: TBackupSnapshot[];
clear?: boolean;
resourceTypes?: Array<TBackupSnapshot['type']>;
};
response: {
restored: TBackupSnapshot[];
};
}
+2
View File
@@ -2,6 +2,7 @@ import * as plugins from '../plugins.js';
import * as adminRequests from './admin.js'; import * as adminRequests from './admin.js';
import * as baremetalRequests from './baremetal.js'; import * as baremetalRequests from './baremetal.js';
import * as backupRequests from './backup.js';
import * as certificateRequests from './certificate.js'; import * as certificateRequests from './certificate.js';
import * as clusterRequests from './cluster.js'; import * as clusterRequests from './cluster.js';
import * as configRequests from './config.js'; import * as configRequests from './config.js';
@@ -29,6 +30,7 @@ import * as versionRequests from './version.js';
export { export {
adminRequests as admin, adminRequests as admin,
baremetalRequests as baremetal, baremetalRequests as baremetal,
backupRequests as backup,
certificateRequests as certificate, certificateRequests as certificate,
clusterRequests as cluster, clusterRequests as cluster,
configRequests as config, configRequests as config,